在使用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对象,并按预期运行。