我想在我的数据库中创建一个新记录,但问题是多级引用。
我有以下内容:
[Serializable]
public class CodeInfo
{
public Guid CodeId { get; set; }
public string Value get; set; }
}
和
[Serializable]
public class PersonInfo
{
public Guid PersonId{ get; set; }
public string Name { get; set; }
public CodeInfo Code get; set; }
}
我的情况是我首先用这样的代码更新一个人:
var person = p.GetPerson(1234);
person.Name = "Jane";
Context.Person.Attach(person);
Context.Entry(person).State = EntityState.Modified;
Context.SaveChanges;
这完美无缺
当我执行以下操作时:
var person = new Person();
person.Name = "Jane";
person.Code = new Code();
person.Code = "existingCode";
Context.Person.Attach(person);
Context.Entry(person).State = EntityState.Added;
Context.SaveChanges;
当我之前不做更新时,这也很有效。当我执行两者时,我收到一个错误:
附加“Model.CodeInfo”类型的实体失败,因为另一个实体 相同类型的实体已具有相同的主键值。这个 使用“附加”方法或设置状态时可能会发生 如果图中的任何实体具有,则实体为“未更改”或“已修改” 冲突的关键值。这可能是因为一些实体是新的和 尚未收到数据库生成的键值。在这种情况下使用 “添加”方法或“已添加”实体状态可跟踪图表和 然后将非新实体的状态设置为“未更改”或“已修改”为 合适的。
也试过
Context.Person.Add(person);
但是这会导致同样的错误,实体框架试图在数据库中创建一个CodeInfo,但我只想创建一个与对象的关系。
如何解决这个问题?
...当然简化了代码...