【发布时间】:2014-09-09 16:21:50
【问题描述】:
我正在尝试获取我在 EF5 应用程序中插入、更新或删除的每个条目的主键信息。我使用类似这样的代码:
//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)";
}
然而,这段代码的问题是当新记录被插入到数据库时它不起作用。当条目的状态为 EntityState.Added 时,key.EntityKeyValues 的值为空(此代码将 keyName 的值设置为“(NotFound)”。
有没有办法在插入记录时获取主键的列名?
【问题讨论】:
-
为什么要一次又一次地从对象中获取键名?您应该从元数据中获取它:stackoverflow.com/q/7253943/861716。
标签: c# entity-framework entity-framework-5 primary-key