POCO を使用してモデルを構築しました。データベースをシードすると、次のようになります。
'CSP.Models.Type_Color' 関係のプリンシパル エンドを特定できません。追加された複数のエンティティが同じ主キーを持つ場合があります
問題のモデルは次のとおりです。
public class Type
{
[Key]
[ScaffoldColumn(false)]
public int TypeId { get; set; }
[Required(ErrorMessage = "A Type Name is Required")]
[Display(Name="Type")]
public string Name { get; set; }
public int ColorId { get; set; }
public bool Other { get; set; }
//Navigations
[ForeignKey("ColorId")]
public virtual Color Color { get; set; }
public virtual List<Tools> tools { get; set; }
}
public class Color
{
[Key]
[ScaffoldColumn(false)]
public int ColorId { get; set; }
[Required(ErrorMessage = "A name is required")]
public string Name { get; set; }
public string Description { get; set; }
//navigation
public virtual List<Type> Types { get; set; }
}
提案を読んだ後に行ったマークアップのほとんど。
エラーが発生しているシードコードは次のとおりです。
var colors = new List<Color>
{
new Color{Name="Red"},
new Color{Name="White"}
};
var types = new List<Type>
{
new Type{ Name="Hammer", Color = colors.Where(ws => ws.Name=="Red").Single()},
new Type{ Name= "Electric", Color = colors.Where(ws => ws.Name=="Red").Single()}
};
new List<Tool>
{
new Wine{ Maker= Maker.Single(v => v.Name=="HammerCo"), Type= types.Single(wt => wt.Name=="hammer")},
}
}.ForEach(a => context.Tools.Add(a));
context.SaveChanges();
また、各値をコンテキストに追加して保存してみました。タイプエンティティを保存しようとした後、このエラーが発生しました:
[System.Data.SqlClient.SqlException] = {"INSERT ステートメントが FOREIGN KEY 制約 \"Type_Color\" と競合しました。データベース \"TestTools\"、テーブル \"dbo.Colors\"、列 'ColorId で競合が発生しました'.\r\nステートメントは終了しました。"}
私は何が欠けていますか?