Abend,
ich spiele mich gerade mit dem UnitofWork und Repository Pattern die Implementierung funktioniert eigentlich ganz gut und tut was es soll.
Aktuell habe ich eine "GetAll" Methode welche Daten aus der DB liest und als ObservableCollection zurückgibt:
Hier mal das Interface vom Repository (nur mit der Relevanten Function):
Dann noch das eigentliche Repository (nur mit der relevanten Function):
Spoiler anzeigen
In meinem Modell verwende ich angelehnt an das "Homestorage" Projekt ein IDelete Interface welches ein logisches löschen (setzen einer Property IsDeleted = True) übernimmt.
Jetzt hätte ich gerne meine GetAll Methode erweitern damit ich auswählen kann ob "nur aktive", "nur gelöschte" oder "alle" Items einer Entität geholt werden sollen.
Mein Versuch (hier nur mit einer Boolean Variable für IsDeleted Änderung im Repository ist durchgeführt aber nicht abgebildet um den Text kurz zu halten:
Natürlich klappt das nicht weil die Property Deleted nicht in meiner generischen Klasse TEntity zu finden sein kann.
Normalerweise würde ich jetzt prüfen ob die Entität das IDelete Interface implementiert hat dann danach Casten und meine Where Clause zusammenbauen.
Aber TEntity hat kein GetType, ich kann es auch nicht direkt als Type benutzen und somit stehe ich gerade ziemlich an....
Daher zu meiner Frage, gibt es eine Möglichkeit das auf Repository Ebene zu schaffen oder muss ich mein, ich nenne es mal, typisiertes GetAll in alle typisierten Repositories einbauen? (Da klappt es ja auch weil TEntity dort eben schon das Objekt ist).
*Topic verschoben*
ich spiele mich gerade mit dem UnitofWork und Repository Pattern die Implementierung funktioniert eigentlich ganz gut und tut was es soll.
Aktuell habe ich eine "GetAll" Methode welche Daten aus der DB liest und als ObservableCollection zurückgibt:
Hier mal das Interface vom Repository (nur mit der Relevanten Function):
Dann noch das eigentliche Repository (nur mit der relevanten Function):
VB.NET-Quellcode
- Imports System
- Imports System.Collections.Generic
- Imports System.Collections.ObjectModel
- Imports System.Data.Entity
- Imports System.Linq
- Imports System.Linq.Expressions
- Imports MyERP.Core.Repositories
- Imports System.Reflection
- Namespace Persistence.Repositories
- Public Class Repository(Of TEntity As Class)
- Implements IRepository(Of TEntity)
- Protected ReadOnly Context As DbContext
- Public Sub New(ByVal _context As DbContext)
- Context = _context
- End Sub
- Public Function GetAll() As ObservableCollection(Of TEntity) Implements IRepository(Of TEntity).GetAll
- Return New ObservableCollection(Of TEntity)(Context.[Set](Of TEntity)())
- End Function
- End Class
- End Namespace
In meinem Modell verwende ich angelehnt an das "Homestorage" Projekt ein IDelete Interface welches ein logisches löschen (setzen einer Property IsDeleted = True) übernimmt.
Jetzt hätte ich gerne meine GetAll Methode erweitern damit ich auswählen kann ob "nur aktive", "nur gelöschte" oder "alle" Items einer Entität geholt werden sollen.
Mein Versuch (hier nur mit einer Boolean Variable für IsDeleted Änderung im Repository ist durchgeführt aber nicht abgebildet um den Text kurz zu halten:
VB.NET-Quellcode
- Public Function GetAll(Optional IsDeleted as Boolean = False) As ObservableCollection(Of TEntity) Implements IRepository(Of TEntity).GetAll
- if IsDeleted then
- Return New ObservableCollection(Of TEntity)(Context.[Set](Of TEntity)(function(x) x.Deleted = False))
- else
- Return New ObservableCollection(Of TEntity)(Context.[Set](Of TEntity)())
- end if
- End Function
Natürlich klappt das nicht weil die Property Deleted nicht in meiner generischen Klasse TEntity zu finden sein kann.
Normalerweise würde ich jetzt prüfen ob die Entität das IDelete Interface implementiert hat dann danach Casten und meine Where Clause zusammenbauen.
Aber TEntity hat kein GetType, ich kann es auch nicht direkt als Type benutzen und somit stehe ich gerade ziemlich an....
Daher zu meiner Frage, gibt es eine Möglichkeit das auf Repository Ebene zu schaffen oder muss ich mein, ich nenne es mal, typisiertes GetAll in alle typisierten Repositories einbauen? (Da klappt es ja auch weil TEntity dort eben schon das Objekt ist).
*Topic verschoben*
mfG.
Stephan
Stephan
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()