3

EF5 では、コード ファーストのアプローチと流暢な API を使用して、他のテーブルの主キーではないキーに基づいてナビゲーション プロパティ (多対 1) を作成するにはどうすればよいでしょうか?

私のデータベースモデルはそのままで、変更できません:

  • TableFoo1
    • Foo1ID int (キー)
    • Field1 int
    • 値の varchar
  • TableFoo2
    • Foo2ID int (キー)
    • Field1 int
    • 値の varchar
  • テーブルバー
    • BarID int (キー)
    • Field1 int
    • 値の varchar

これらのエンティティが必要です:

public class Foo1
{
    public int Foo1ID { get; set; }
    public int BarID { get; set; }    //It corresponds Bar.ID
    public string Value { get; set; }
    public Bar Bar { get; set; }
}

public class Foo2
{
    public int Foo2ID { get; set; }
    public int BarID { get; set; }    //It corresponds to Bar.Field1, NOT Bar.ID
    public string Value { get; set; }
    public Bar Bar { get; set; }
}

public class Bar
{
    public int ID { get; set; }
    public int Field1 { get; set; }
    public string Value { get; set; }
}

これが私の地図です(2番目のものは不完全なものです):

public  class Foo1Map : EntityTypeConfiguration<Foo1>
{
    public Foo1Map()
    {
        this.HasKey(e => e.Foo1ID);

        // Links to Bar's Primary Key, yay, it's easy.
        this.HasRequired(e => e.Bar).WithMany().HasForeignKey(e => e.BarID);
    }
}

public  class Foo2Map : EntityTypeConfiguration<Foo2>
{
    public Foo2Map()
    {
        this.HasKey(e => e.Foo2ID);

        // No clues of how to links to Bar's other unique column, but not primary key.
        this.HasRequired(e => e.Bar).WithMany()........?
    }
}

public class BarMap : EntityTypeConfiguration<Bar>
{
    public BarMap()
    {
        this.HasKey(e => e.BarID);
    }
}
4

1 に答える 1

0

私が質問で尋ねた場合、どこFoo1Foo2両方Barが異なるキーでリンクされているか(Bar側面)は、EF5では実行できません(投稿の詳細は、この質問のほぼ複製です)そのままです。ただし、すべてのオブジェクト (Foo1およびFoo2ここ) を同じ列に (単一性制約を使用して) マップする必要がある場合Barは、マッピング内の他のオブジェクト (ここ) の PK でなくても、その列をキーに設定できます。Foo1また、とに同じ列を使用したくないが、コンテキストの同じインスタンスでFoo2必要になることはない場合Foo1Foo2、動的マッピングを使用できますが、危険であり、多くの複雑さがあります。

于 2013-03-25T18:51:17.373 に答える