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

您正在以两种不同的方式捕获“地址类型”的概念。

你有你的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并分别从 Addresses 返回 Billing 和 Shipping 地址提供辅助方法。

说了这么多,不知道你说的是什么意思

我遇到的问题是如何区分每个 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 回答