2016-09-13 17 views
2

ORMとしてEntity Framework 6.1を使用しています。 RuleCodeエンティティの間に1対多の関係を設定したいと思います。私はRuleParametersと呼ばれる中間ラッパークラスでこれを行いたいと思います。また、私はこのラッパーオブジェクトをDBに表現したくありません。Entity Frameworkの中間ラッパークラスと一対多の関係を構成する方法

これはEFで可能ですか?もしそうなら、どのようなアノテーション/流暢なAPI設定が欠けていますか?

これは私の設定です。私はここで流暢なAPIを介して簡潔に注釈を表示しています。私が遭遇した

public class Rule 
{ 
    public Rule() 
    { 
     Parameters = new RuleParameters(); 
    } 

    public int RuleId { get; set; } 

    [NotMapped] 
    public RuleParameters Parameters { get; set; } 

} 

public class RuleParameters 
{ 
    public virtual IList<Code> Codes; 
} 

public Code 
{ 
    public int CodeId { get; set; } 

    public int RuleId { get; set; } 

    [ForeignKey("RuleId")] 
    public Rule Rule { get; set; } 

} 

問題:

  • RuleParameters私は自然に複合型としてそれを扱いたい、しかしCodes協会(1/2)(2/2)に起因するものではないことができるように実体ではありません。
  • EFからのRuleParametersラッパーを隠すと同時に、一対多の関係を構成することは矛盾しているようです。
+0

@GertArnold '[NotMapped]'は、 'RuleParameters'を隠すためのものです。しかし、そうすることは、エンティティ間で構成したいあらゆる種類の関係を隠すことにもなります。したがって、矛盾です:(。 – Mantzel

+0

'RuleParameters'を隠すことはできません。複雑な型としてマップする必要があります。流暢なAPI、またはデータアノテーションを使用しています –

答えて

0

なぜあなたは中間クラスを使いたいのですか? 中間クラスなしで関係を作成します。

public class Rule 
{ 
    public Rule() 
    { 
     Codes = new HashSet<Code>(); 
    } 

    public int RuleId { get; set; } 

    public ICollection<Code> Codes { get; set; } 
} 

public Code 
{ 
    public int CodeId { get; set; } 

    public int RuleId { get; set; } 

    public virtual Rule Rule { get; set; } 
} 
+0

こんにちは、感謝のために私のデザインの議論は、この問題がEFで解決可能かどうかに焦点を当てて省略しました。 10 +の子供のテーブル。私はこれらの10 +テーブルの関係を組織化するのではなく、むしろそれらをすべて平らにするよりもむしろ組織的に分類したいと思います。例えば、私はRule.RuleParametersが4つのナビゲーションプロパティと別のタイプのRule.Filters IMOラッパーは、各プロパティRuleParameterCodeまたはRuleFilterDateの名前を変更するよりも多くのコンテキストを提供します。 – Mantzel

関連する問題