实体Frmwk pb:在当前上下文中搜索“已添加”实体

时间:2009-08-12 13:34:08

标签: entity-framework constraints guid

我正在使用guids作为我的实体的PK。 由于EF不支持newid()SQL语句,我在创建方法中强制使用 Guid.NewGuid()

这是我的问题: 我有一个具有聚集唯一约束的表(2个字符串,而不是PK)。

我在相同的 EF上下文中运行了一些代码,这些代码执行操作并添加/链接实体等。

是否可以在我的上下文中搜索处于“已添加”状态的实体?;也就是说哪个在我的上下文中,但尚未插入我的数据库中。

为了避免引发SQL唯一约束,我必须知道实体是否已在上下文中“排队”,并重新使用它而不是创建新的Guid(...和另一个实体! :()

1 个答案:

答案 0 :(得分:1)

这篇文章救了我:):

http://geekswithblogs.net/abhijeetp/archive/2009/07/23/retrieving-added-entities-from-the-objectstatemanager-to-avoid-duplication.aspx

var stateEntries = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EtityState.Modified | EntityState.Unchanged);  
    var roleEntityEntries = stateEntries.Select(s => s.Entity).OfType<Role>();  
    roleEntity = roleEntityEntries.FirstOrDefault(r => r.RoleName.Trim().ToLower() == roleName.Trim().ToLower());  
    if (roleEntity == null)  
    {  
        return new Role { RoleName = roleName };  
    }