2011-12-30 10 views
0

EFは私にとって親切ではありません。ナビゲーションプロパティの利便性を保ちながら、別々の主キーを持つ1対1の関係を作成する必要があります。しかし、私が何を試みても、EFはナビゲーションプロパティを削除しなければエラーになります。エンティティフレームワーク - 1対1の関係でNav Propsを使用してプライマリキーを分離

ここに問題の完全な図があります。ご覧のように、私は主キーをマージすることはできません。そして、関係は常に1-1であるため、私は1 .. *の関係をシミュレートしたくありません。

public class SingleParent 
{ 
    public Guid ParentID { get; set; } 
    public virtual OnlyChild Child { get; set; } 
} 

public class OnlyChild 
{ 
    public Guid ChildID { get; set; } 
    public virtual SingleParent Parent { get; set; } 
} 

// Parent and Child cannot share a primary key because a pediatrician only treats children. 
public class Pediatrician 
{ 
    public Guid PediatricianID { get; set; } 
    public virtual List<OnlyChild> Patients; 
} 

どのように私は、ナビゲーションプロパティは、そのParent.Child < ==>などChild.Parentを得ることができますか?残りのコードと一貫性を持たせるため、Data Annotationsでこれを行うことをお勧めします。どんな知恵でも大歓迎です!

+0

明確にするために、小児科のクラスは、私がSingleParentとOnlyChildのためにPKをマージできない理由を明確にするためにのみ存在します。親の<-->子ナビゲーションプロパティを有効にすることだけに興味があるので、無視してもかまいません。 –

答えて

0

両方のエンティティに外部キーを追加すると、DataAnnotationsとFluent APIの両方で機能するはずです。

public class SingleParent 
    { 
     public Guid ParentID { get; set; } 
     public Guid ChilId { get; set; } 

     [ForeignKey("ChildId")] 
     public virtual OnlyChild Child { get; set; } 
    } 

    public class OnlyChild 
    { 
     public Guid ChildID { get; set; } 
     public Guid ParentId { get; set; } 

     [ForeignKey("ParentId")] 
     public virtual SingleParent Parent { get; set; } 
    } 

Here is some documentationこれは、1対1の関係を作成する方法を説明しています。

+0

私はそれが簡単だったと思う。しかし、次のエラーで失敗します。 'EFTestHarness.SingleParent'と 'EFTestHarness.OnlyChild'の間の関連付けの主な終わりを特定できません。この関連付けの主な終点は、流暢なAPIまたはデータアノテーションのどちらかの関係を使用して明示的に構成する必要があります。 –

+0

Mmm .. ok ..奇妙なことは、ブログポストが(CTPを使用しているので)古くなっている可能性がありますか? –

関連する問題