将多级实体添加到数据库(CODE FIRST)

时间:2015-03-05 13:09:39

标签: c# entity-framework

我想在我的数据库中创建一个新记录,但问题是多级引用。

我有以下内容:

[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,但我只想创建一个与对象的关系。

如何解决这个问题?

...当然简化了代码...

0 个答案:

没有答案