gpt4 book ai didi

entity-framework - 无法保存多对多关系

转载 作者:行者123 更新时间:2023-12-04 06:22:29 26 4
gpt4 key购买 nike

我有以下表格/ View

Users (View)
-> UserId
-> Name

Roles (Table)
-> RoleId
-> Name

UserRoles (Table)
-> UserId
-> RoleId

和类(class)
public class Role{
public int RoleId{get;set}
public string Name{get;set}
}

public class User{
public int UserId{get;set}
public string Name{get;set}
public ICollection<Role> Roles{get;set}
}

和保存方法
using (var helper = new DbContext())
{
helper.Users.Attach(user);
helper.SaveChanges();
}

如上所示,Users 是一个 View ,UserRoles 是一个映射表。我能够检索用户实体以及映射的角色。但是在保存时它不会抛出任何异常,也不会保存。我尝试使用探查器检查数据库,它甚至没有击中数据库。

由于用户是一个 View ,我不想保存用户实体,而只想保存在角色集合中所做的更改。

最佳答案

这不能保存任何东西。 Attach将整个对象图放入上下文中,但处于状态 Unchanged .如果上下文中的所有对象都没有改变 SaveChanges不会向数据库发出任何命令(因为对于 EF 没有任何改变)。

如果要进行 EF 识别的更改,则必须首先附加表示 Db 中状态的对象,然后进行更改,例如:

using (var helper = new DbContext())
{
helper.Users.Attach(user);
helper.Roles.Attach(myNewRole);
user.Name = myNewName;
user.Roles.Add(myNewRole);
// etc.
helper.SaveChanges();
}

或者,您可以将用户标记为已修改:
helper.Entry(user).State = EntityState.Modified;

但我相信这只会影响实体的标量属性,并不能解决向用户添加新角色的问题。

关于entity-framework - 无法保存多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386014/

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