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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta