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