Рассмотрим домен, в котором у клиента, компании, сотрудника и т. д. есть свойство ContactInfo, которое, в свою очередь, содержит набор адресов (es ), Phone (es ), Email (s ), и т. д., и т. д.
Вот моя сокращенная 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);
}
}
Некоторые примечания (Я не уверен на 100%, что это «лучшие практики» EF):
ISet
, чтобы гарантировать отсутствие дубликатов адресов для каждого контактаAddAddress
, я могу гарантировать, что всегда и не более 1 адреса является первичным....Я хотел бы, чтобы (, если это возможно, )предотвращало добавление адресов с помощью метода ContactInfo.Addresses.Add()
и принудительно использовало ContactInfo.AddAddress(Address address)
...
Я думаю открыть набор адресов через ReadOnlyCollection
, но будет ли это работать с Entity Framework (v5 )?
Как бы я это сделал?