EntityFramework - problem z wherem

EntityFramework - problem z wherem
SH
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Wrocław
  • Postów:24
0

Hej,

Mam dwa projekty jeden 'CORE' drugi 'DAL'. W dal mieści się EF a w core logika biznesowa. Dodałem referencje DAL do CORE i chciałbym wykonać 'Where'a na contexcie.
Wstrzykuję sobie do klasy context następnie próbuje wykonać np.

Kopiuj
_context.EMA.Where(x => x.)

i tutaj mi krzyczy że on nie chce FUNCa tylko Experssion<Func>. Dzieje się to w klasy w projekcie 'CORE' we wszystkich funkcjach typu 'Where', 'FirstorDefaul' itp.
Natomiast gdy próbuje to wykonać w projekcie 'DAL' mogę normalnie wykonać zapytanie.

Miał ktoś może podobny problem?
Z góry dzięki za pomoc.

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Wrocław
1

Mały problem polega na tym, że chcesz użyć metody rozszerzającej IEnumerable<T>, a nie IQueryable<T>. Można to "naprawić" dodając odpowiednią referencję.

Ale to dobrze, że na Ciebie krzyczy, bo obnaża to duży problem. To co chcesz zrobić jest po prostu pozbawione sensu. Po co dzielisz na jakieś moduły, skoro i tak chcesz mieć jedną warstwę?

edytowany 1x, ostatnio: somekind
Aventus
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
0

Tak jak somekind napisał głównym problemem jest to że źle to projektujesz. Problem który opisujesz to tylko objaw, a nie przyczyna. Twój projekt Core nie powinien polegać na jakichkolwiek projektach infrastruktury. Powinieneś odwrócić zależności.


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
SH
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Wrocław
  • Postów:24
0

Hej, dzięki za szybkie odpowiedzi.
Generalnie planuje aplikację która będzie miała API, webUI oraz WinService.
WinService - będzie na bieżąco coś obliczać oraz korzystać z DAL
API - dla UI, api będzie też korzystać z DAL.
Core - części wspólne - tutaj z tego co widzę to chyba jednak nie będzie korzystać z DAL.

Chyba że źle to planuje. :P

SH
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Wrocław
  • Postów:24
0
Aventus napisał(a):

Tak jak somekind napisał głównym problemem jest to że źle to projektujesz. Problem który opisujesz to tylko objaw, a nie przyczyna. Twój projekt Core nie powinien polegać na jakichkolwiek projektach infrastruktury. Powinieneś odwrócić zależności.

Mógłbyś podpowiedzieć o jaki pakiet chodzi?

SH
Generalnie usunąłem EF z projektu (resharper sam mi dodał). Zainstalowałem na nowo i działa :)
Aventus
Jaki pakiet masz na myśli?
SH
Install-Package EntityFramework -Version 6.2.0 - taki o
Aventus
Przepraszam ale nie rozumiem o co pytasz.
Aventus
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
0

Teraz już lepiej kombinujesz. Może Win serwis powinien rownież komunikować się z API zamiast bezpośrednio korzystać z DALa.

Ogólnie to polecam poczytać o clean architecture i powiązanych zagadnieniach, bo z jednego wątku na forum ciężko żebyś nauczył się robić to prawidłowo. Tutaj dosyć lekka, aktualna i darmowa książka od Microsoftu: https://www.microsoft.com/net/download/thank-you/aspnet-ebook


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
SH
Super ! Dzięki za linka i podpowiedź. Masz rację takie rozwiązanie może być lepsze :)
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:dzień
  • Lokalizacja:Wrocław
0
shukibruck napisał(a):

Core - części wspólne - tutaj z tego co widzę to chyba jednak nie będzie korzystać z DAL.

Core może korzystać z DAL, ale nie powinien polegać na EntityFrameworku, który powinien być przez DAL ukryty. Wszelkie zapytania do bazy powinny być wykonywane w warstwie DAL, a jej metody powinny zwracać jakieś standardowe kolekcje, a nie iQueryable. To, co Ty chcesz zrobić z IQueryable dostępnym w Core to wyciek abstrakcji.

SH
a czy poprzez ukryte masz namyśli np. generyczne repozytorium ?
somekind
Generyczne repozytorium już masz, EF jest nim. Chodzi mi o jakieś obiekty DAO.

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.