Entity Framework, metoda ToList()

Entity Framework, metoda ToList()
DO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
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?

Kopiuj
    public class RepozytoriumProduktow : IRepozytoriumProduktow
    {
        private EfDbContext context = new EfDbContext();
        public IEnumerable<Produkt> Produkty { get { return context.Produkty.ToList(); }  }
    } 
ŁF
  • Rejestracja: dni
  • Ostatnio: dni
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.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.