2012-04-06 6 views
3

Entity Framework 4.3 Code-FIrstを使用して新しいデータベースモデルを作成しています。 Fluent APIを使用します。ダミーモデルは以下の通りです。EntityFrameworkとFluentAPIでComplexTypesを使用する

私の主な目的は何かであり、私はこれを把握する必要があります。他のすべてのアイテムは援助しています。通常、データベースでは、連絡先、プライマリキー、関係のためのforeginキーなどのテーブルを割り当てます。しかし、Fluent APIとComplex Types、特にthis articleについてもっと読むと、私はEFがそれらのオブジェクト/テーブルを結びつけることができると気付きました。私はそれらをMVCのリポジトリとして心配する必要はありませんアプリ。

ので注意してください。

  • 何かが1
  • 問い合わせ
  • と多くの連絡先は、アドレスを持つ多くの1件の
  • 問い合わせはPhoenNumber

知ると、多くのものを持っていましたこれは、私の混乱は複雑なタイプの中にあります。なぜなら、連絡先は一意かつ複雑なタイプのためです。& PhoneNumberは複雑なタイプなのでメーキング。

  • Fluent APIでこの関係を設定するにはどうすればよいですか?
  • 住所は必須ですか?
  • ASP.NET MVCでドメイン駆動型開発を使用すると、コントローラにプッシュするためにIContactRepositoryとIAddressRepositoryのリポジトリを維持する必要がありますか?

(いくつかのコードを簡潔にするため省略していることに注意してください。)

// attempt 
void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.ComplexType<Contact>(); 

    modelBuilder.ComplexType<Contact>().Property(p => p.Address).IsRequired(); // COMPILER ERROR 

    modelBuilder.ComplexType<Address>(); 
    modelBuilder.ComplexType<PhoneNumber>();  
} 


// DUMMY MODEL 
class Something() 
{ 
    void Something() 
    { 
     this.Contact = new HashSet<Contact>(); 
    } 

    DateTime DOB { get; set; } 
    int YearsEmployed { get; set; } 
    ICollection<Contact> Contact { get; set; } 
} 

class Contact() 
{ 
    void Contact() 
    { 
     this.Address = new HashSet<Address>(); 
    } 

    ICollection<Address> Address { get; set; } 
} 

class Address() 
{ 
     string Street1 { get; set; } 
     string Street2 { get; set; } 
     string State { get; set; } 
     string City { get; set; } 
     string Zip { get; set; } 
     OptionName OptionName { get; set; } 
} 

class PhoneNumber() 
{ 
    string Number 
    OptionName OptionName { get; set; } 
} 

class OptionName() 
{ 
    string OptionName { get; set; } 
} 
+0

「modelBuilder.ComplexType ();」を呼び出すことは、クラスに '[ComplexType]'属性を流暢に適用する方法です。 – Jess

答えて

6

あなたのクラスのノーどちらが複合型です。 Complex typesは厳しい規則に従う必要があります。それらはナビゲーションプロパティを含むことができず、所有エンティティのテーブルにマップされるため、所有エンティティと一対一の関係以外の形式では表現できません。

+1

こんにちは、ありがとう。したがって、基本的にAddress、PhoneNumber、Contactのようなものは、独自のID(PhoneNumberId、AddressIdなど)を持つ独自のエンティティである必要がありますか? –

関連する問題