【发布时间】:2017-09-26 13:04:40
【问题描述】:
我正在尝试插入一个名为 Document 的新实体:
public class Document
{
public int Id { get; set; }
public virtual ICollection<User> UsersOne { get; set; }
public virtual ICollection<User> UsersTwo { get; set; }
}
实体 Document 与实体 User 有两个多对多关系:
public class User
{
public int Id { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
}
在我的请求中,我发送以下 Json:
{
"UsersOne": [{"Id": 1},{"Id": 2},{"Id": 3}],
"UsersTwo": [{"Id": 1},{"Id": 2},{"Id": 3}],
"Id": 0
}
问题是我已经在上下文中拥有用户,当我在上下文_context.Document.Add(entity); 中添加实体文档时,实体将用户插入到具有添加状态的上下文中。
也许一种解决方案是将状态更改为未更改:
foreach (var user in entity.UsersOne)
_context.Entry(user).State = EntityState.Unchanged;
foreach (var user in entity.UsersTwo)
_context.Entry(user).State = EntityState.Unchanged;
但是当我这样做时,我有以下错误
保存或接受更改失败,因为多个“Entity.User”类型的实体具有相同的主键值。确保显式设置的主键值是唯一的。
我也尝试将两个集合合二为一,并更改它们的状态,但上下文仍然有用户添加状态。
在将文档添加到上下文之前,我还尝试将用户状态更改为分离,但是在_context.SaveChangesAsync(); 上,由于属性电子邮件和密码,引发了“System.Data.Entity.Validation.DbEntityValidationException”类型的异常是用户所必需的。
【问题讨论】:
-
我也有同样的问题!
标签: c# .net entity-framework entity-framework-6