2016-11-17 13 views
0

私は、次のおもちゃの例のような状況があります。Entity Frameworkのコード・ファーストで複雑な型に対して1対多の関係を定義できますか?

public class Person 
{ 
    public Guid Id { get; set; } 
    public string FullName { get; set; } 
    public ContactInfo ContactInfo { get; set; } 
} 

public class ContactInfo 
{ 
    public string EmailAddress { get; set; } 
    public IEnumerable<Address> PostalAddresses { get; set; } 
} 

public class Address 
{ 
    public Guid Id { get; set; } 
    public Guid PersonId { get; set; } 
    /* ... other properties ... */ 
} 

実際の状況ははるかに複雑であり、私は本当にPostalAddressesプロパティの同等のようにはContactInfoの代わりPerson上にあるでしょう。

これはEntity Framework Code Firstを使用して可能ですか?

は基本的に、私は上記には、次のテーブル構造にシリアライズしたい


EDIT:

  • テーブル:人々

    • 同上
    • フルネーム
    • ContactInfo_EmailAddress
  • テーブル:

    • 同上
    • PERSONID
    • アドレス...

だから、問題は、私が持っている必要があるということですIEnumerable<Address>コレクションがルートタイプの代わりにContactInfo複合タイプのPersonであることを確認してください。 Personオブジェクトを保存すると、Address行がデータベースに追加されません。

+1

あなたが求めていることははっきりしません。 – user2697817

答えて

1

あなたの質問は完全にはっきりしているようです。

私は専門家ではありませんが、How to specify a relation on a complex type?によると、あなたがしようとしていることはできません。 ComplexTypeはナビゲーションプロパティを持つことはできません。

複合型の代わりに、ContactInfoをエンティティとして定義することをお勧めします。したがって、ContactInfoにはPKがあり、それ自体のテーブルです。

もっと良い解決策を知っている人がいますか?

ところで、私は似たようなことを試みました。私(簡体字)ドメイン:

アプリケーション

  • イド:候補
  • 再開:
  • 候補をint型、私はこのクラスの別のテーブルを持っていないことを好む< ==を再開しますが、これを達成する方法は?

再開

  • 経験:[体験]
  • トレーニング:[トレーニング]

経験

  • イド:int型
  • 説明:文字列

トレーニング

  • イド:
  • 説明int型:文字列を

候補

  • イド:私はあまりにも同上を再開与えてしまったが、結果はただ一つの列からなる冗長レビューテーブルで、アプリケーションに等しい履歴書同上(つまり、文字列

  • 名前をint型Id)。

  • +0

    ありがとうございます。私はこれも不可能であることに気付きました。私の場合は、基になるSQLテーブル構造がどのようなものかが本当に気になりますので、別々のフラットなデータアクセスモデルを作成しました。私はちょっとしたAutoMapperの魔法で私のドメインモデルをそれにマップすることができます。 –

    関連する問題