Entity Framework solo leer colecciones
Considere un dominio en el que un Cliente, Compañía, Empleado, etc., tenga una propiedad ContactInfo que a su vez contenga un conjunto de Direcciones, Teléfono (s), Correo (s), etc., etc.
Aquí está mi información de contacto abreviada:
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);
}
}
Algunas notas (no estoy 100% seguro de que estas sean las "mejores prácticas" de EF):
la colección de direcciones es virtual para permitir la carga diferidasetter privado en la colección prohíbe el reemplazo de coleccióncolección es unaISet
Asegurar que no haya direcciones duplicadas por contacto.utilizandoAddAddress
Método Puedo asegurar que siempre haya como máximo 1 dirección, que es la principal ...Me gustaría (si es posible) evitar agregar direcciones a través deContactInfo.Addresses.Add()
método y para forzar el uso deContactInfo.AddAddress(Address address)
...
Estoy pensando en exponer el conjunto de direcciones a través de.ReadOnlyCollection
¿Pero funcionará esto con Entity Framework (v5)?
¿Cómo voy a hacer esto?