我有以下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
枚举的区别?
答案 0 :(得分: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
上提供辅助方法,分别从地址返回结算和送货地址。
话虽如此,我不确定你的意思
我遇到的问题是如何区分每个ICollection上的AddressType枚举?
每个ICollection
都应引用相同的AddressType
枚举。
使用我建议的方法,你可以写
public Address DefaultBillingAddress
{
get
{
return Addresses
.First(x => x.IsDefault == true && x.AddressType == AddressType.Billing);
}
}