3

Entity Framework 4.3 Code-FIrst を使用して新しいデータベース モデルを作成しています。Fluent API を使用します。ダミーモデルは以下。

したがって、私の主な目的は何かであり、これを追跡する必要があります。他のすべての項目は補足です。通常、データベースでは、連絡先などのテーブル、主キー、および関係の外部キーを割り当てます。ただし、Fluent API とComplex Types、特にこの記事について詳しく読むと、EF にこれらのオブジェクト/テーブルのリンクを任せることができ、それらをリポジトリとして心配する必要がないことに気付きました (私はそう思います)。私のMVCアプリ。

注意してください:

  • Contact を使用した 1 対多の何か
  • 連絡先は、アドレスを持つ 1 対多です
  • 連絡先は PhoenNumber と 1 対多

これを知っていると、私の混乱は複合型にあります。なぜなら、Contact は Somethign の複合型であり、Address & 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; }
}
4

1 に答える 1

6

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

于 2012-04-06T14:53:57.753 に答える