Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架多对多不断添加额外记录_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework 实体框架多对多不断添加额外记录

Entity framework 实体框架多对多不断添加额外记录,entity-framework,ef-code-first,Entity Framework,Ef Code First,我试图首先使用entityframework代码向链接表添加一条新记录。我拥有的是用户和角色上的多对多。我的场景是,当我为用户更改角色时,我会删除他们以前的所有角色,并添加新角色,如下所示: //Delete all associated roles for user var roleUser = db.Users.Include(r => r.Roles).FirstOrDefault(u => u.UserId == user.UserId); var usersRoles =

我试图首先使用entityframework代码向链接表添加一条新记录。我拥有的是
用户
角色
上的多对多。我的场景是,当我为用户更改角色时,我会删除他们以前的所有角色,并添加新角色,如下所示:

//Delete all associated roles for user
var roleUser = db.Users.Include(r => r.Roles).FirstOrDefault(u => u.UserId == user.UserId);
var usersRoles = roleUser.Roles;

usersRoles.ForEach(role => roleUser.Roles.Remove(role));

//add the new roles
roleUser.Roles.AddRange(detachedUser.Roles);

db.SaveChanges();
所以它完美地去除了它们。但在添加新角色时,它不仅将其添加到链接表中,还将其添加到
角色
表中。添加了一个全新的角色,但没有
RoleName
<代码>用户。角色将包含具有以下数据的项:

RoleId;//1 <-- this Id exists in the database already but yet still it creates one instead of a linktable record.
RoleName;//null

在向用户添加新角色之前,请尝试保存

//Delete all associated roles for user 
var roleUser = db.Users.Include(r => r.Roles).FirstOrDefault(u => u.UserId == user.UserId); 
var usersRoles = roleUser.Roles; 

usersRoles.ForEach(role => roleUser.Roles.Remove(role));  
db.SaveChanges(); 

roleUser.Roles.AddRange(user.Roles); //add the new roles 
db.SaveChanges(); 
编辑:

看看这个:

roleUser.Roles.AddRange(user.Roles); //add the new roles 

user.Roles
来自哪里?

对于您添加的每个卷,您可以尝试检查或设置实体状态。例如,在这里我将set设置为unched。这样它就不会试图插入或更新它

myContext.Entry(roll).State = EntityState.Unchanged
更多信息请点击此处:

我认为您遇到的问题是,在将角色添加到用户之前,您需要附加角色


您也不需要全部删除它们,只需删除已删除的角色,然后只添加新角色。

在添加第二个SaveChanges后,我仍然遇到同样的问题。我认为这就是添加新角色的方式。我可能必须从数据库中获取所有这些文件并添加它们。当您遇到类似这样的问题时,您可能还需要查看您的绑定配置。我过去也遇到过类似的问题。从数据库中取回它们会改变什么吗?@lol coder,你已经找到了创建角色的原因。这些实体被视为新的实体。很高兴看到你已经解决了:)是的,但是如果他在尝试添加新角色之前保存了,那么实体的状态不会保持不变(保存后)吗?我同意@moi_meme的观点,即你只需要删除那些需要删除的。另一方面,我不认为这是一个涉及附加/分离状态的问题。因为对象从未分离。@Alexandre Brisebois-我写道,因为他的变量被称为DetachedUsermy bad,所以我没有注意到部分显然已经解决了,但无法理解是什么解决了它。请你再贴一次答案中阻止创建新角色的部分。
myContext.Entry(roll).State = EntityState.Unchanged