2016-02-25 13 views
5

私はいくつかのプロパティを含むクラスを持っています。 いくつかのアーキテクチャ上の理由から、私はクラスに別のオブジェクトのインスタンスを持っています。私は(私のサブエンティティは、独自の知性を持っている)私のメインのエンティティに私のすべてのサブエンティティのプロパティを統合することはできませんEF内部オブジェクトのプロパティへのコア流暢なマッピング

builder.ToTable(MyEntity.CONST_TABLE_NAME); 
builder.HasKey(m => m.Id); 
builder.Property(m => m.Column1).IsRequired(); 
builder.Property(m => m.SubEntity.Column2).IsRequired(); 

簡単な例このため

public class MyEntity { 
    public MySubEntity SubEntity {get; set;} 
} 

は、私のような流暢なマッピングを作成します。私はちょうど分離されたテーブルに格納されていない私のsubentityのプロパティを、myEntityテーブルにマップしたいと思います。

最後の行は、例外をスロー:

The expression 'm => m.SubEntity.Column2' is not a valid property expression. The expression should represent a property access: 't => t.MyProperty'. 

にはどうすれば、このようなマッピングを行うことができますか?

答えて

3

EFコアは、このタイプのマッピングを現在サポートしていません。それは(私のgithubの問題を参照してください。https://github.com/aspnet/Home/issues/1330)EFコア1.0 RTMでサポートされません私はgithubの問題で説明したように

、私は2つのソリューションを考え出した:)

1を私のモデルから派生したクラスを作成し、 EFのために設計されたspecialyは、すべてのプロパティを簡単なものとして公開します。挿入/更新とDbからの検索時に、より多くのマッピングが必要になります。このオプションは選択しません。

2)プロキシプロパティを作成します。私の例では、これは次のようなものです:

public class MyEntity { 
    private MySubEntity SubEntity {get; set;} 
    public string SubEntityValue 
    { 
    get 
    { 
     return SubEntity.Value; 
    } 
    set 
    { 
     SubEntity.Value = value; 
    } 
} 

これは最適な解決策です(この方法を選択します)。

関連する問題