Piz*_*000 7 c# entity-framework primary-key entity-framework-5
我试图获取我在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)";
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码的问题在于,当将新记录插入数据库时,它无法正常工作.当条目的状态是EntityState.Added时,key.EntityKeyValues具有空值(此代码将keyName的值设置为"(NotFound)".
有没有办法在插入记录时获取主键的列名?
Piz*_*000 11
我找到了一种方法,将原始代码与Gert发布的链接中的代码结合起来:
//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)
{
EntitySetBase setBase = ObjectContext.ObjectStateManager
.GetObjectStateEntry(entry.Entity).EntitySet;
string[] keyNames = setBase.ElementType.KeyMembers.Select(k => k.Name).ToArray();
string keyName;
if (keyNames != null)
keyName = keyNames.FirstOrDefault();
else
keyName = "(NotFound)";
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,它似乎正在起作用,即使我添加了新记录.
归档时间: |
|
查看次数: |
4253 次 |
最近记录: |