Entity Framework nur-lese-Sammlungen

Überlegen, eine domain, wo ein Kunde, Unternehmen, Mitarbeiter, etc, etc, haben eine ContactInfo Eigenschaft, die wiederum enthält eine Reihe von Adresse(N), Telefonnummer(N), E-Mail(s), etc, etc...

Hier ist mein abgekürzt 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);
    }
}

Einige Anmerkungen (ich bin mir nicht 100% sicher, ob diese EF "best practices"):

  • Sammlung-Adresse(N) virtuell ist, zu ermöglichen, lazy loading
  • private setter collection verbietet collection Ersatz
  • - Kollektion ist ein ISet zu versichern, dass es keine doppelten Adressen pro Kontakt
  • mit AddAddress Methode kann ich versichern, dass es immer und bei den meisten 1-Adresse, die primäre....

Möchte ich (wenn möglich) um zu verhindern, dass das hinzufügen von Adressen per ContactInfo.Addresses.Add() Methode und zu zwingen, mit der ContactInfo.AddAddress(Address address)...

Ich bin am überlegen auszusetzen, die Adressen, die über ReadOnlyCollection aber wird diese Arbeit mit Entity Framework (v5)?

Wie würde ich das angehen?

InformationsquelleAutor zam6ak | 2012-06-25
Schreibe einen Kommentar