Domanda

Sto usando Entity Framework e parte del mio codice voglio mettere dire 100 entità al database. Alcuni dei soggetti che sto inserendo hanno relazione molti a molti e voglio fare in modo che sto inserire solo i nuovi elementi. E 'facile da controllare quelli esistenti nel db, ma se ho già inserito nel mio sessione corrente a persistere i 100 elementi, mi metterò elementi ripetuti.

La cosa è la chiave primaria sono solo generato automaticamente e l'unicità tavolo proviene da una colonna unica che non è supportato in EF. Come faccio a controllare se non ho già inserito la parte oggetto della mia sessione in EF 4.1? Ho visto il metodo find sul DbContext, ma che ha bisogno di chiave primay che non posso usare. Dato che io uso 4.1, mi sono bloccato con DbContext troppo. Come posso avere un modo generico per controllare questo?

È stato utile?

Soluzione

Se si desidera utilizzare EF si dovrebbe attaccare con PK come identificazione univoca delle vostre entità. In caso contrario, la vostra esperienza di sviluppo sarà piuttosto male.

Se si desidera verificare se già elaborati lo stesso articolo nell'uso contesto attuale:

bool exists = context.YourDbSet.Local.Any(x => x.UniqueId == someId)

Se avete bisogno di controllare lo stato di utilizzo di entità:

EntityState state = context.Entry(entity).State;

Se avete bisogno di controllare se l'entità esiste nell'uso database:

YourEntity entity = context.YourDbSet.SingleOrDefault(x => x.UniqueId == someId);

L'ultima affermazione non è in realtà un modo migliore nel sistema concorrente, perché quando si chiama l'entità non deve esistere, ma una volta che si chiama SaveChanges altro processo potrebbe già inserito l'entità. Non v'è alcun modo semplice per trattare con esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top