Entity Framework, metoda ToList()

0

Mam poniższy kod, przy użyciu metody ToList() zwraca listę produktów, ale kiedy zostanie jedynie context.Produkty to zwraca null, a z tego co rozumiem powinno zwrócić IEnumerable? Źle myślę, czy coś jest nie tak?

    public class RepozytoriumProduktow : IRepozytoriumProduktow
    {
        private EfDbContext context = new EfDbContext();
        public IEnumerable<Produkt> Produkty { get { return context.Produkty.ToList(); }  }
    } 
3

Przede wszystkim zastanów się, co robisz.
Getter za każdym razem wykonuje context.Produkty.ToList(), które to za każdym razem wykonuje zapytanie na bazie danych, wyciąga listę wszystkich produktów, a potem EF opakowuje je w obiekty C#. Masakra wydajnościowa.
Ponadto nie zwracaj IEnumerable tam, gdzie możesz zwrócić IList albo ICollection, tak będzie potencjalnie znacznie wydajniej (dlaczego? za dużo tłumaczyć na tak późną godzinę).
I nie mieszaj polskiego z angielskim, wygląda to fatalnie. Cały język, natywne typy, wszystkie frameworki itp. do niego są po angielsku, a Ty w to wpychasz polskie nazwy. Fuj.

Zastanawiam się, dlaczego to nie działa i nie mogę nic wymyślić. context.Produkty powinno zwrócić DbSet<T>, które implementuje IEnumerable<T>. Nawet jeśli w bazie jest pusto nie powinien być zwrócony null, tylko pusta lista, co wskazuje na to, że rzutowanie jest nieprawidłowe. Sprawdź, czy przy (IEnumerable<Produkt>)context.Produkty nie poleci wyjątek.

0

No i coś takiego Produkty nie powinno być właściwością tylko metodą. Właściwości nie powinny wykonywać złożonych operacji na zewnętrznych systemach ani zmieniać swoich wartości, jeśli na obiekcie nie została wykonana żadna operacja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1