[将Code First DbContext与Entity Framework 5.0 RC一起使用]
public class Compositon
{
public string Id { get; set; }
public string SimpletonId { get; set; }
[ForeignKey("SimpletonId")]
public Simpleton Simpleton { get; set; }
public string CompanitonId { get; set; }
[ForeignKey("CompanitonId")]
public Companiton Companiton { get; set; }
}
var composition = new Compositon();
compositon.Id = "UniquePrimaryKey";
var simpleton = new Simpleton();
// This foreign key does not exist in database yet
simpleton.Id = "Simpleton1";
composition.Simpleton = simpleton;
var companiton = new Companiton();
companiton.Id = "SomeOther1";
composition.Companiton = companiton;
// Repositor references the DbContext
Repositor.Compositons.Add(composition);
Repositor.SaveChanges();
var composition = new Compositon();
compositon.Id = "AnotherUniquePrimaryKey";
var simpleton = new Simpleton();
// This foreign key already exists in database
simpleton.Id = "Simpleton1";
composition.Simpleton = simpleton;
var companiton = new Companiton();
companiton.Id = "SomeOther2";
composition.Companiton = companiton;
Repositor.Compositons.Add(composition);
Repositor.SaveChanges();
DbUpdateException: An error occurred while updating the entries.
我需要能够将这些父类保存到数据库中,因为它们是唯一的,即使它们有时包含已存储的导航属性 - 如何从父子主键冲突中保存父类? / em>的
答案 0 :(得分:1)
在第二次传递中,您需要从Simpleton
检索现有的DbContext
。我猜你可以这样做:
`simpleton = Repositor.Simpletons.First(s => s.Id == "Simpleton1");`
目前,您正在创建一个全新的实体框架,实体框架会尝试插入,因此违反密钥。