7

オプション: オプションの関係を持つ 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 にマップされるためです。

4

1 に答える 1

5

オブジェクトから 1:0..1 の関係を設定しようとしているようですAdditionalType(完全に誤解している可能性があります。

NBこれが機能するためには、BaseTableIdを保持する必要があると思いますBaseTable(または主キーを定義します):

がこのインスタンスの外部キーである場合BaseTableId、これがあなたが求めているものである可能性があると思います:

modelBuilder.Entity<AdditionalType1>()
    .HasOptional(zmt => zmt.BaseTable)
    .WithMany()
    .HasForeignKey(a => a.BaseTableId);

これは私が以前に使用したものですが、それを完全に理解することは認められません (.WithMany() は私をつまずかせます); これは、この回答の記事にリストされているわずかな回避策です: Entity Framework 0..1 to 0 relationship )

ポイントを完全に逃した場合はお詫び申し上げます。

于 2013-06-27T15:06:45.950 に答える