【发布时间】:2013-07-09 02:45:14
【问题描述】:
考虑一个域,其中客户、公司、员工等具有 ContactInfo 属性,该属性又包含一组地址、电话、电子邮件等...
这是我的缩写 ContactInfo:
public class ContactInfo : Entity<int>
{
public ContactInfo()
{
Addresses = new HashSet<Address>();
}
public virtual ISet<Address> Addresses { get ; private set; }
public Address PrimaryAddress
{
get { return Addresses.FirstOrDefault(a => a.IsPrimary); }
}
public bool AddAddress(Address address)
{
// insure there is only one primary address in collection
if (address.IsPrimary)
{
if (PrimaryAddress != null)
{
PrimaryAddress.IsPrimary = false;
}
}
else
{
// make sure the only address in collection is primary
if (!Addresses.Any())
{
address.IsPrimary = true;
}
}
return Addresses.Add(address);
}
}
一些注意事项(我不确定这些是否是 EF“最佳实践”):
- 地址集合是虚拟的以允许延迟加载
- 集合的私有设置器禁止集合替换
- 集合是
ISet,以确保每个联系人没有重复的地址 - 使用
AddAddress方法,我可以确保始终且最多有 1 个地址是主地址....
我希望(如果可能)阻止通过ContactInfo.Addresses.Add() 方法添加地址并强制使用ContactInfo.AddAddress(Address address)...
我正在考虑通过 ReadOnlyCollection 公开地址集,但这是否适用于 Entity Framework (v5)?
我该怎么办?
【问题讨论】:
标签: c# entity-framework ef-code-first readonly-collection