gpt4 book ai didi

c# - 使用 Entity Framework 更新多对多关系?

转载 作者:行者123 更新时间:2023-11-30 23:31:48 26 4
gpt4 key购买 nike

我有一个多对多连接表,带有双键(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’是键的一部分,因此无法修改或标记为已修改。”

(以下评论的预计到达时间)- 我的模型是:

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

public virtual int RoleId { get; set; }
}

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

最佳答案

您正试图在一侧修改多对多关系的键。多对多关系在数据库中表示为一个表,其中包含关系中双方的外键。

您尝试做的是尝试更改对象的键,但外键表中仍保留一个引用,导致违反约束 - 因为 N-N 表中的值尚未更新。

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

关于c# - 使用 Entity Framework 更新多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34472865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com