Próbuję uzyskać podstawowe informacje o kluczach dla każdego wpisu, który wstawiam, aktualizuję lub usuwam w aplikacji EF5. I użyć kodu podobnego do tego:Uzyskaj klucz podstawowy DBEntityEntry podczas dodawania
//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)";
}
problem z tym kodem jest jednak to, że to nie działa, gdy nowy rekord jest włożona do bazy danych. Gdy stan wpisu to EntityState.Added, klucz.EntityKeyValues ma wartość pustą (ten kod ustawia wartość keyName na "(NotFound)".
Czy istnieje sposób uzyskania nazwy kolumny dla klucza podstawowego, gdy płyta jest włożona
Po co wielokrotnie otrzymywać nazwę klucza z obiektów? Powinieneś go pobrać z metadanych: http://stackoverflow.com/q/7253943/861716. –