Sto cercando di ottenere le informazioni sulla chiave primaria per ogni voce che sto inserendo, aggiornando o eliminando in un'applicazione EF5. Io uso il codice simile a questo:Ottieni la chiave primaria di DBEntityEntry quando si aggiunge
//Get collection of each insert, update, or delete made on the entity.
IEnumerable<DbEntityEntry> changedEntries = this.ChangeTracker.Entries()
.Where(e => e.State == EntityState.Added
|| e.State == EntityState.Modified
|| e.State == EntityState.Deleted);
foreach (DbEntityEntry entry in changedEntries)
{
//Get primary key collection
EntityKey key = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager
.GetObjectStateEntry(entry.Entity).EntityKey;
string keyName;
//Get name of first key. Make sure a collection was returned.
if (key.EntityKeyValues != null)
keyName = key.EntityKeyValues[0].Key;
else
keyName = "(NotFound)";
}
Il problema con questo codice, tuttavia, è che non funziona quando un nuovo record viene inserito nel database. Quando lo stato della voce è EntityState.Added, key.EntityKeyValues ha un valore null (questo codice imposta il valore di keyName su "(NotFound)."
C'è un modo per ottenere il nome della colonna per la chiave primaria quando viene inserito un record
Perché ottenere il nome della chiave da oggetti più e più volte? Dovresti scaricarlo dai metadati: http://stackoverflow.com/q/7253943/861716. –