オプション: オプションの関係を持つ Entity Framework モデルをセットアップしようとしています。
私の状況では、BaseTable レコードを指す AdditionalData レコードが存在する場合もありますが、BaseTable または AdditionalData レコードがリンクなしで存在する場合もあります。BaseTable への外部キー (存在する場合) は、AdditionalData テーブルにあります。
BaseTable と、接続されている可能性のある追加データの間を行き来できるようにしたいと考えています。
BaseTable 0..1 ----- 0..1 AdditionalData1
\
--- 0..1 AdditionalData2
public class BaseTable {
public int Id { get; set; }
public virtual AdditionalType1 AdditionalType1 { get; set; }
public virtual AdditionalType2 AdditionalType2 { get; set; }
}
public class AdditionalType1 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
public class AdditionalType2 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
どうすればこれを機能させることができますか? 私は限りました:
modelBuilder.Entity<AdditionalType1>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType1)
.Map(a => a.MapKey("BaseTableId"));
modelBuilder.Entity<AdditionalType2>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType2)
.Map(a => a.MapKey("BaseTableId"));
しかし、それは私にこれを教えてくれます:
エラー: (1564,6): エラー 0019: 型の各プロパティ名は一意である必要があります。プロパティ名 'BaseTableId' は既に定義されています。
それが何を指しているのか正確にはわかりません。また、修正方法もわかりません。
編集:ここで提案されているように Map/MapKey 句を削除すると ( https://stackoverflow.com/a/8016308/237091 )、それを使用するクエリを実行すると、代わりにこのエラーが発生します:
無効な列名 'BaseTable_Id' は、BaseTableId フィールドではなく自動的に BaseTable_Id にマップされるためです。