2011-06-17 13 views
1

エンティティでコードの最初のメソッドを使用すると、単一の外部キーに関連付けられた複数の関係を確立できますか?例えばEntity Framework 4.1コードファースト - 複数の関係を持つ外部キー?

、私は次のクラスを持っていると言う:

public class BuzzItem 
{ 
    public int  BuzzItemID  { get; set; } 
    public string Title   { get; set; } 
    public string Description  { get; set; } 

    // Collection of Comments posted about this BuzzItem (FOREIGN KEY) 
    public virtual ICollection<Comment> Comments { get; set; } 
} 

public class Merchant 
{ 
    public int  MerchantID  { get; set; } 
    public string Name   { get; set; } 

    // Collection of Comments posted about this Merchant (FOREIGN KEY) 
    public virtual ICollection<Comment> Comments { get; set; } 
} 

public class Comment 
{ 
    public int  CommentID  { get; set; } 
    public string Comment   { get; set; } 

    // These would both be a FOREIGN KEY to their respectivate tables 
    public virtual BuzzItem BuzzItemID { get; set; } 
    public virtual Merchant UserID { get; set; } 
} 

は二重の関係を確立し、BuzzItemや商人のオブジェクトのいずれかを受け入れることができる単一の変数を持つ2つの外部キーの変数を交換することが可能です関係のために?

私はこのサンプルを簡潔にするためにスクラップから作成しました。だから、私のコードにミスがあったらお詫びしますが、達成しようとしていることの一般的な考え方はうまくいけば分かります。

答えて

1

不可能です。 EFはデータベースとまったく同じように動作します.FKは単一のエンティティタイプとの単一の関係に密接です。 Btw。ナビゲーションプロパティはFKではなく、FKはナビゲーションプロパティの背後に隠れていますが、同じことがまだあります。ナビゲーションプロパティは複数のリレーションの間で共有できません。

+0

代わりに、次のようなものを試すことは可能でしょうか? 'public virtual int SourceID {get;セット; } 'を呼び出して、RTTIを使用してBuzzItemオブジェクトまたはMerchantオブジェクトにキャストしますか?もしそうなら、それをどうやって実装するかについてのヒントはありますか? –

1

table-per-type inheritance in EFを使用すると、this patternを使用してください。

+0

+1これは技術的に私が探していた解決策であるためです。しかし、あなたがリンクしている他の質問と同じように、Entityスーパークラスは共通のプロパティを持たないEntityID変数を持つ以外の目的を果たしません。しかし、私は厳密な設計原則に基づいて正当な解決策を取り戻すものではないので、私はこの道を行くかもしれません。しかし、そこにはもっとエレガントなアプローチがあると思っています。 –