Używam EntityFramewotk i kodu pierwszego podejścia. Więc opiszę mój model tak:EntityFramework i ReadOnlyCollection
class Person
{
public long Id { get;set; }
public string Name { get;set; }
public ICollection<Person> Parents { get;set; }
}
Ale moja logika domeny nie pozwalają na modyfikowanie rodzice Collection (dodawanie, usuwanie), to musi być tylko do odczytu (tylko dla przykładu). EntityFramework wymaga, aby wszystkie kolekcje miały interfejs ICollection<T>
i mają metodę Add
(aby zmaterializować wyniki) i Remove
i inne. mogę stworzyć własną kolekcję wyraźnej realizacji interfejsu:
public class ParentsCollection : ICollection<Person>
{
private readonly HashSet<Person> _collection = new HashSet<Person>();
void ICollection<Person>.Add(Person item)
{
_collection.Add(item);
}
bool ICollection<Person>.Remove(Person item)
{
return _collection.Remove(item);
}
//...and others
}
Ukrywa Add
i Remove
metod, ale nie chroni w ogóle. Ponieważ zawsze mogę rzucić na ICollection i wywołać metodę zabronioną.
Więc moje pytanie brzmi:
- Czy istnieje sposób, aby pracować z kolekcji tylko do odczytu w EntityFramework?
Możliwy duplikat [Entity Framework czytać tylko zbiory] (http://stackoverflow.com/questions/11191103/entity-framework-read-only-collections) – Machet