使用实体框架更新多对多关系吗?

NovaDev

我有一个具有双键(PersonId,RoleId)的多对多联接表。为了简单起见,我的Person表中只有一个PersonId。同样,使用EF7,它还不支持EF6的很多优点(例如,通过导航属性连接表的隐式性)。

我可以在SQLite中运行此查询,并且可以正常使用:update PersonRole set RoleId = 2 where PersonId = 1,我无法在EF中执行相同的操作:

var du = context.PersonsRoles.Where(p => p.PersonId == 1).First();
du.RoleId = 2;
context.PersonsRoles.Update(du);
context.SaveChanges(); //get an error here

错误是这样的:“发生了未处理的异常:实体类型'PersonRole'上的属性'RoleId'是键的一部分,因此无法进行修改或标记为已修改。”

(下面的每个评论的ETA)-我的模型是:

public class PersonRole
    {
        public virtual int PersonId { get; set; }

        public virtual int RoleId { get; set; }
    }

我找到了一个答案,其中包括删除原始行(1,1)然后重新插入(1,2)的选项,但这对我来说似乎效率很低。那真的是修改关系的唯一方法吗?

尼克·L。

您正在尝试在一侧修改多对多关系的键。数据库中用表保存多对多关系,该表包含关系中双方的外键。

您尝试做的是尝试更改对象的键,但是外键表中仍然保留了引用,这导致约束冲突-因为NN表中的值尚未更新。

EF7中不允许进行此更改。您应该使用SQL命令来执行此操作,而不要考虑多对多表更新。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新多对多关系实体框架

来自分类Dev

更新实体框架中的多对多关系

来自分类Dev

实体框架多对多关系

来自分类Dev

Odata和实体框架,多对多关系不会更新

来自分类Dev

在实体框架中使用Fluent API创建多对多关系

来自分类Dev

实体框架使用存根删除多对多关系

来自分类Dev

在实体框架中使用Fluent API创建多对多关系

来自分类Dev

使用多对多关系实体框架强制内部联接

来自分类Dev

使用多对多关系在实体框架中出错

来自分类Dev

实体框架使用代码优先的多对多关系

来自分类Dev

如何使用实体框架查询多对多关系

来自分类Dev

使用多对多关系添加对象实体框架

来自分类Dev

实体框架多对多关系删除

来自分类Dev

实体框架中的多对多关系

来自分类Dev

实体框架核心-与多对多关系的问题

来自分类Dev

实体框架与主键多对多关系

来自分类Dev

实体框架:多对多关系的ID列表

来自分类Dev

实体框架多对多关系访问数据

来自分类Dev

多个多对多关系实体框架

来自分类Dev

实体框架中的多对多关系

来自分类Dev

实体框架多对多关系错误

来自分类Dev

与实体框架核心中同一实体的多对多关系

来自分类Dev

渴望加载与关联实体的多对多关系-实体框架

来自分类Dev

实体框架一对多和多对多关系

来自分类Dev

实体框架一对多和多对多关系

来自分类Dev

使用实体框架将数据添加到多对多关系

来自分类Dev

正确的Linq查询使用代码优先实体框架生成的具有多对多关系的对象

来自分类Dev

实体框架多对多关系表创建为“向后”

来自分类Dev

实体框架-渴望加载两个多对多关系