删除多对多关系抛出InvalidOperationException

时间:2014-05-19 21:50:12

标签: entity-framework ef-code-first

在使用Entity Framework 6作为ORM(代码优先)的项目中,我们在用户和角色之间建立了多对多关系:

entity.HasMany(t => t.Roles)
            .WithMany(t => t.Users)
            .Map(m =>
            {
                m.ToTable("UserRole");
                m.MapLeftKey("User_Id");
                m.MapRightKey("Role_Id");
            });

现在,代码用于从角色中删除用户,最后我们调用上下文对象的SaveChanges:

RoleModel role = RoleModel role = m_UoW.Repository<RoleModel>().Query(r => r.Id ==     roleId).Include(r => r.Users).Select().First();

role.Users.Remove(role.Users.First(u => u.Id == userId));

m_UoW.SaveChanges();

但是在SaveChanges中,会抛出InvalidOperationException,并显示以下消息

  

ObjectStateEntry是一个关系条目。关系条目的当前值和原始值不能修改。

这个StackTrace:

  

at System.Data.Entity.Core.Objects.RelationshipEntry.GetUpdatableOriginalValues()

     

在EFHooks.IaExtensions.b__2(ObjectStateEntry e,Int32 i)

     

在EFHooks.IaExtensions。&lt;&gt; c__DisplayClass7.b__5(ObjectStateEntry e)

     

在System.Linq.Enumerable。&lt;&gt; c__DisplayClass12`3.b__11(TSource x)

     

at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()

     

在System.Collections.Generic.List 1.InsertRange(Int32 index, IEnumerable 1集合)

     

在System.Collections.Generic.List 1.AddRange(IEnumerable 1集合)

     

在EFHooks.HookedDbContext.SaveChanges()

     

at Repository.Pattern.Ef6.DataContext.SaveChanges()

有什么想法吗?

这不是实体框架问题,我尝试使用纯EF对象,并按预期运行。

0 个答案:

没有答案