C# 向数据库添加多级实体(代码优先)
我想在数据库中创建一个新记录,但问题是多级引用 我有以下资料:C# 向数据库添加多级实体(代码优先),c#,entity-framework,C#,Entity Framework,我想在数据库中创建一个新记录,但问题是多级引用 我有以下资料: [Serializable] public class CodeInfo { public Guid CodeId { get; set; } public string Value get; set; } } var person = new Person(); person.Name = "Jane"; person.Code = new Code(); person.Code = "existingCode"
[Serializable]
public class CodeInfo
{
public Guid CodeId { get; set; }
public string Value get; set; }
}
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;
及
我遇到的情况是,我首先用如下代码更新一个人:
var person = p.GetPerson(1234);
person.Name = "Jane";
Context.Person.Attach(person);
Context.Entry(person).State = EntityState.Modified;
Context.SaveChanges;
这很好用
当我执行以下操作时:
[Serializable]
public class CodeInfo
{
public Guid CodeId { get; set; }
public string Value get; set; }
}
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);
但这会导致同样的错误,entity framework试图在数据库中创建一个CodeInfo,但我只想在对象中创建一个关系
如何解决这个问题
…代码当然简化了…
person.code=newcode()
person.code=“existingCode”
这是个问题。现在将CodeId添加到person类中,但我诚实地认为它不是很干净,但它解决了问题。我希望EF更聪明一点。