10

[Required]Entity Framework で複合型の属性を定義したいと考えています。たとえばCustomer、オプションのエンティティがありますAddress。Address エンティティには必須のPostCodeプロパティがあります。

[ComplexType]
public class Address {
    public string Address1 { get; set; }
    [Required]
    public string PostCode { get; set; }
}

public class Customer {
    public int CustomerId {get;set;}
    public Address Address {get;set;}
}

Complex 型を別のエンティティとして保存したくありません (実際には Address を使用していません。これは問題の簡単な例です)。次のエラーが発生するため、Customer.Address を null のままにすることはできません。

null 非許容メンバーの null 値。メンバー:「アドレス」。

空の Address エンティティを指定すると、Required 属性が原因で PostCode フィールドの検証が失敗します。

これを達成する方法はありますか?EF5/NET4.5 を使用しています。

4

1 に答える 1

8

複合型では不可能です。null 許容にする場合は、 Address エンティティを作成する必要があります。

複合型で EF が行うことは、プロパティを同じテーブルにマップすることです。これは、意図したように聞こえます。

そのため、例のスキーマは次のようになります。

ここに画像の説明を入力

Address_PostCode の null 非許容列を使用すると、データベースでは有効ではないため、オブジェクトに住所と郵便番号がないと、EF が行を作成する方法がありません。

于 2012-10-12T11:18:09.013 に答える