C# 多对多每次都在创建新记录,代码优先,EF

C# 多对多每次都在创建新记录,代码优先,EF,c#,.net,entity-framework,ef-code-first,C#,.net,Entity Framework,Ef Code First,这个问题快把我逼疯了。我知道以前有人问过这个问题,我也尝试过所有这些解决方案。我知道我做错了什么,但我无法在哪里找到它 我有以下型号: public class User : UserEntityBase { /// <summary> /// Gets or sets roles. /// </summary> public ICollection<SecurityRole> Roles { get; s

这个问题快把我逼疯了。我知道以前有人问过这个问题,我也尝试过所有这些解决方案。我知道我做错了什么,但我无法在哪里找到它

我有以下型号:

 public class User : UserEntityBase
{
  /// <summary>
        /// Gets or sets roles.
        /// </summary>
        public ICollection<SecurityRole> Roles { get; set; }
}
我想插入名为“Everyone”的安全角色的新用户。 我正在使用域服务>存储库模型

在用户域服务插入方法中,我有以下代码:

 var everyonerole = _roleService.Get(rol => rol.Name.Equals(SystemRoleTypes.Everyone.ToString())).SingleOrDefault();




if (everyonerole != null)
            {
                entity.Roles = new List<SecurityRole>();
                entity.Roles.Add(everyonerole);
            }

            base.Insert(entity, out message);
var everyonerole=\u roleService.Get(rol=>rol.Name.Equals(SystemRoleTypes.Everyone.ToString()).SingleOrDefault();
if(everyonerole!=null)
{
entity.Roles=新列表();
entity.Roles.Add(everyonerole);
}
基本。插入(实体,输出消息);
通过运行insert,它将在以下位置插入记录:

用户以及SecurityRole表。 然后在securityuserroles中创建一个关系

我理解这是因为“分离行为”。但是,我从数据库中获取一个角色对象,并直接添加到系统中


请提供帮助。

两个查询是否在同一个上下文实例上运行?e、 g.您的
roleService.Get()
是否使用了与您的
基础不同的实例。Insert
是,这两个实例使用的是Ninject提供的相同上下文实例,并且您的
Get()
没有使用
AsNoTracking()
?我首先使用的是代码,所以我认为我没有调用AsNoTracking()。ToList()任何地方…为什么实体框架会将现有对象重新插入到我的数据库中?msdn.microsoft.com/en-us/magazine/dn166926.aspx
HasMany(u => u.Roles).WithMany(r=>r.Users).Map(m=>m.ToTable("securityuserroles").MapLeftKey("UserID").MapRightKey("RoleID"));
 var everyonerole = _roleService.Get(rol => rol.Name.Equals(SystemRoleTypes.Everyone.ToString())).SingleOrDefault();




if (everyonerole != null)
            {
                entity.Roles = new List<SecurityRole>();
                entity.Roles.Add(everyonerole);
            }

            base.Insert(entity, out message);