2010-08-26 14 views
5

Chciałbym użyć kolekcji Lazy-loading na modelu, ale chcę, aby funkcja dodawania/usuwania była wykonywana osobnymi metodami. Więc coś takiego:Entity Framework CTP4 Code First: Mapowanie właściwości chronionych

class Model 
{ 
    protected virtual ICollection<Something> _somethings { get; set; } 

    public IEnumerable<Something> Somethings 
    { 
    get { return _somethings; } 
    } 

    public void AddSomething(Something thingToAdd) 
    { 
    /* logic */ 
    _somethings.Add(thingToAdd); 
    } 
} 

Nie mogę dowiedzieć się, jak skonfigurować mapowanie dla tego. Przyjrzałem się używaniu klasy konfiguracji: EntityConfiguration. Ale ponieważ właściwość jest chroniona, nie mogę wymyślić, jak ustawić na niej konfigurację. Czy jest jakiś sposób, aby osiągnąć to, co próbuję tutaj zrobić?

+0

Would coś takiego repozytorium pracy? –

+0

Podobno masz podobny problem jak ja: http://stackoverflow.com/questions/3574333/ef-4-0-mapping-to-readonly-property-with-private-field –

Odpowiedz

0

Przypuszczam, że jeśli zadeklarujesz klasę konfiguracji (dziedziczącą EntityConfiguration) wewnątrz klasy Model, to może działać. To nie jest dobre rozwiązanie, ponieważ subklasowanie jest ogólnie odradzane, ale jest to jedyna rzecz, o której mogę myśleć.

0

Słyszałem, że to można zrobić tylko przy użyciu pliku EDMX .. nie koduj najpierw.

1

Można użyć wyrażenia readonly statycznych za dostęp do chronionego obiektu jak to

protected virtual ICollection<Something> _somesing { get; set; } 
public static readonly Expression<Func<Model, ICollection<Something>>> Expression = p => p._something; 

public IReadOnlyCollection<Something> Something 
{ 
    return _sumething.AsReadOnly(); 
} 

i używać go w sposób OnModelCreating w klasie DbContext dla mapowania chroniony własności

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Model>().HasMany<Something>(Model.Expression); 
} 
Powiązane problemy