0

私は次のCustomerクラスを持っています:

public class Customer : EntityBase<Customer>
{
    public virtual int ID { get; set; }
    public virtual CustomerType CustomerType { get; set; }

    public virtual string CompanyName { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }

    public virtual ICollection<Address> BillingAddresses { get; set; }
    public virtual ICollection<Address> ShippingAddresses { get; set; }
}

クラスは次のAddressようになります。

public class Address : EntityBase<Address>
{
    public virtual int ID { get; set; }
    public virtual AddressType AddressType { get; set; }
    public virtual bool IsDefault { get; set; }
    public virtual string Name { get; set; }
    public virtual string Line1 { get; set; }
    public virtual string Line2 { get; set; }
    public virtual string Line3 { get; set; }
    public virtual string City { get; set; }
    public virtual string State { get; set; }
    public virtual string ZipCode { get; set; }
    public virtual string Country { get; set; }

    public virtual int CustomerID { get; set; }
    public virtual Customer Customer { get; set; }
}

顧客クラスに各種類の住所を複数持つことができるようにしたいのですが、それを理解するのに苦労しています。

各タイプのデフォルトアドレスを取得するには、このようなものになりたいと思います。

public Address DefaultBillingAddress
{
    get
    {
        return BillingAddresses.First(x => x.IsDefault == true);
    }
}

AddressType私が抱えている問題は、それぞれの列挙型の違いをどのように見分けるICollectionかです。

4

1 に答える 1

1

「アドレスタイプ」の概念を2つの異なる方法で捉えています。

あなたはあなたのAddressType列挙型を持っていますAddress、そしてあなたはまた別のものを持っています

public virtual ICollection<Address> BillingAddresses { get; set; }
public virtual ICollection<Address> ShippingAddresses { get; set; }

このモデルでは、BillingAddressesにAddressType.Shippingを含むものが含まれる可能性があり、その逆も可能です。

オブジェクトモデルを次のように単純化することをお勧めします

public virtual ICollection<Address> Addresses { get; set; }

Customerそして、アドレスからそれぞれ請求アドレスと配送アドレスを返すヘルパーメソッドを提供します。

そうは言っても、あなたが何を意味するのかわかりません

私が抱えている問題は、各ICollectionのAddressType列挙型の違いをどのように見分けるかです。

それぞれICollectionが同じAddressType列挙型を参照する必要があります。

私の提案したアプローチを使用して、あなたは書くことができます

public Address DefaultBillingAddress
{
    get
    {
        return Addresses
         .First(x => x.IsDefault == true && x.AddressType == AddressType.Billing);
    }
}
于 2013-02-05T04:07:21.507 に答える