C# Oracle ODP.Net和EF CodeFirst-保存更改错误

C# Oracle ODP.Net和EF CodeFirst-保存更改错误,c#,oracle,ef-code-first,odp.net,entity-framework-4.3,C#,Oracle,Ef Code First,Odp.net,Entity Framework 4.3,有人能帮我吗 守则: Role r = new Role { ID = 1, Name = "Members" }; ctx.Roles.Attach(r); //Saving User User u = new User { Login = login, Password = password, Status = 1 }; u.Roles.Add(r); ctx.Users.Add(u); ctx.SaveChanges(); 我试图做的是用现有角色保存一个新用户

有人能帮我吗

守则:

Role r = new Role { ID = 1, Name = "Members" };
ctx.Roles.Attach(r);

//Saving User
User u = new User {
    Login = login,
    Password = password,
    Status = 1
};
u.Roles.Add(r);

ctx.Users.Add(u);
ctx.SaveChanges();
我试图做的是用现有角色保存一个新用户。用户和角色类具有由fluent api映射的多对多关系,如下所示:

modelBuilder.Entity<User>()
.HasMany(u => u.Roles)
.WithMany(r => r.Users)
.Map(x => {
    x.ToTable("USER_ROLE_XREF", dbsch);
    x.MapLeftKey("ID_USER");
    x.MapRightKey("ID_ROLE");
});
据我所知,EF支持通过一个SaveChanges调用保存多个更改,因此我想知道这里有什么问题。

使用Attach方法的想法是,您有一个已知位于数据库中但未被此上下文跟踪的实体,对吗?我想问你的问题是,你是否确定这个角色:

Role r = new Role { ID = 1, Name = "Members" };
有什么东西已经存在了吗?如果没有,我不认为你想做的是使用

ctx.Roles.Attach(r);
而是你会写:

ctx.Roles.Add(r);
然后你就可以转身写了

User u = new User {
    Login = login,
    Password = password,
    Status = 1,
};

ctx.Users.Add(u);
u.Roles.Add(r);
ctx.SaveChanges();
您的第一个示例的问题是,这个新角色对于DB来说确实是新角色,因此附加它不是您想要做的,而是您想要添加它

在这里,对ctx.SaveChanges的单个调用应该可以正常工作。

Attach方法的思想是,您有一个已知位于数据库中但不被此上下文跟踪的实体,对吗?我想问你的问题是,你是否确定这个角色:

Role r = new Role { ID = 1, Name = "Members" };
有什么东西已经存在了吗?如果没有,我不认为你想做的是使用

ctx.Roles.Attach(r);
而是你会写:

ctx.Roles.Add(r);
然后你就可以转身写了

User u = new User {
    Login = login,
    Password = password,
    Status = 1,
};

ctx.Users.Add(u);
u.Roles.Add(r);
ctx.SaveChanges();
您的第一个示例的问题是,这个新角色对于DB来说确实是新角色,因此附加它不是您想要做的,而是您想要添加它


在这里,只需打一个电话到ctx.SaveChanges就可以了。

嘿,马特,谢谢你的回答。但是,是的,该角色已经存在于数据库中。但是我们假设它是一个新的diff Id,当然,我使用Add方法而不是Attach,我得到了相同的错误。一般来说,这种情况经常发生,我总是尝试通过一个SaveChanges调用添加或更新多个相关实体。嘿,Matt,谢谢你的回答。但是,是的,该角色已经存在于数据库中。但是我们假设它是一个新的diff Id,当然,我使用Add方法而不是Attach,我得到了相同的错误。通常情况下,我总是尝试通过单个SaveChanges调用添加或更新多个相关实体。