2

[将 Code First DbContext 与 Entity Framework 5.0 RC 一起使用]

具有 2 个导航属性/2 个外键的实体

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; }
}

第一遍 - SaveChanges 到空数据库的工作

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.

我需要能够将这些父类保存到数据库中,因为它们是唯一的,即使它们有时包含已经存储的导航属性 - 如何从这个子主键冲突中保存父类?

4

1 回答 1

1

在第二遍中,您将需要SimpletonDbContext. 我猜你可以这样做:

`simpleton = Repositor.Simpletons.First(s => s.Id == "Simpleton1");`

目前,您正在创建一个全新的,实体框架试图插入它,因此违反了密钥。

于 2012-06-12T14:41:46.000 回答