Hallo Leute,
ich habe letzte Woche ein Update auf EF Core 3.1.1 durchgeführt.
Es haben sich ja einige Dinge gewaltig geändert, zum Beispiel wird keine implizierten Client Transactionen für LINQ Queries mehr unterstützt.
Das bisher verwendete GenericRepository (von Sascha) zickt daher rum, ich musste die GetAll Methode z.b. umschreiben:
Leider ist mir jetzt aufgefallen das auch die .Include Methode nicht mehr funktionert. Ich habe schon einiges probiert und rumgesucht aber ich verstehe nicht warum das hier nicht funktioniert:
Die Extension Methode:
Es wird kein Error ausgeworfen rein gar nichts, der Effekt ist das die Navigation Property einfach leer bleibt und nicht geladen wird.
Wenn ich Lazy Loading aktiviere funktioniert die Navigation Property, allerdings will ich LazyLoading aus Performancetechnischer Hinsicht eigentlich vermeiden.
Hat jemand einen Tipp für mich?
-----------
Edit:
Hab jetzt zumindest eine Lösung gefunden, wenn man zuerst den Include macht und dann erst eine "Where" draufsetzt funktioniert es.
Unschön an der Lösung das man, wie in meinem Fall wenn man mit LogicalDelete arbeitet immer eine zusätzliche Zeile benötigt:
und meine "Remove Deleted" im GenericRepository:
Das muss man doch irgendwie schöner hinkriegen oder?
ich habe letzte Woche ein Update auf EF Core 3.1.1 durchgeführt.
Es haben sich ja einige Dinge gewaltig geändert, zum Beispiel wird keine implizierten Client Transactionen für LINQ Queries mehr unterstützt.
Das bisher verwendete GenericRepository (von Sascha) zickt daher rum, ich musste die GetAll Methode z.b. umschreiben:
Leider ist mir jetzt aufgefallen das auch die .Include Methode nicht mehr funktionert. Ich habe schon einiges probiert und rumgesucht aber ich verstehe nicht warum das hier nicht funktioniert:
Die Extension Methode:
Es wird kein Error ausgeworfen rein gar nichts, der Effekt ist das die Navigation Property einfach leer bleibt und nicht geladen wird.
Wenn ich Lazy Loading aktiviere funktioniert die Navigation Property, allerdings will ich LazyLoading aus Performancetechnischer Hinsicht eigentlich vermeiden.
Hat jemand einen Tipp für mich?
-----------
Edit:
Hab jetzt zumindest eine Lösung gefunden, wenn man zuerst den Include macht und dann erst eine "Where" draufsetzt funktioniert es.
Unschön an der Lösung das man, wie in meinem Fall wenn man mit LogicalDelete arbeitet immer eine zusätzliche Zeile benötigt:
VB.NET-Quellcode
- Public Function GetAll(vWithTracking As Boolean, vIncludeDeleted As Boolean, vIncludeNavProperties As Boolean) As IEnumerable(Of T)
- Dim query As IQueryable(Of CombustionChamber) = _Rep.GetAll(vWithTracking)
- if vIncludeNavProperties then query = query.Include("CombustionChamberWallLayers")
- query = _Rep.RemoveDeleted(query, vIncludeDeleted)
- Return query.ToList
- End Function
und meine "Remove Deleted" im GenericRepository:
VB.NET-Quellcode
- Public Overridable Function RemoveDeleted(query As IQueryable(Of T), vIncludeDeleted As Boolean) As IQueryable(Of T)
- If vIncludeDeleted = False AndAlso GetType(ILogicalDelete).IsAssignableFrom(GetType(T)) Then
- query = query.AsEnumerable.Where(Function(x) DirectCast(x, ILogicalDelete).DeletedFlag = False).AsQueryable
- End If
- Return query
- End Function
Das muss man doch irgendwie schöner hinkriegen oder?
mfG.
Stephan
Stephan
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kaifreeman“ ()