Ich habe N-Layer-Lösung in. Net mit PetaPoco als microORM. Ich bekomme die Entities aus dem Template-Generator von PetaPoco. Diese Entitäten T
stammen von der Basisklasse Record<T>
. Dann erweitere ich sie um weitere Datenzugriffseinrichtungen und benutzerdefinierte Save()
und Delete()
Methoden, die die Record<T>
Standardmethoden überschreiben..net generisches Repository-Problem mit petapoco
Im Folgenden ist die overrided Delete
Methode aus der Einheit (die Methode, die ich anrufen mag)
public partial class Document : Record<Document>
{
public new int Delete()
{
int rowsAffected;
using (var uow = DB.GetInstance().GetTransaction())
{
rowsAffected = base.Delete();
LogSystem("Deleting", "Deleting a document", 0, 0, GUID);
uow.Complete();
}
return rowsAffected;
}
}
Dann, wenn ich die generische Repository erstelle die Methoden sind von der Basisklasse immer genannt Record<T>
und nicht meine Gewohnheit einer von den Entitäten. Wenn ich eine entityRepository.Delete()
-Methode aufrufen, sollte die Delete()
-Methode von meiner Entität aufgerufen werden und nicht die aus der Standardklasse Record<T>
.
Die generische Repository-Klasse ist als follwos:
public abstract class GenericRepository<T> : IGenericRepository<T> where T : Record<T>, new()
{
public void Delete(T entity)
{
entity.Delete();
}
}
mit DapperExtensions meine Antwort finden. Auch wenn Sie PetaPoco verwenden, sollten andere Dinge ähnlich sein. https://stackoverflow.com/a/45460483/5779732 –
Hey Mann danke für die Antwort, ich habe bereits in diese Frage schauen, aber es beantwortet nicht, wie ich meine überlagerten Methoden der Entitäten und nicht die generischen aus der Basisklasse. Außerdem verstehe ich nicht, wie man das UoW-Muster integriert, wie Sie sehen, ich benutze es irgendwie, aber als die PetaPoco-Transaktion, von der ich nicht weiß, ob sie wie oben verwendet werden sollte. –
Auch ich bin in jedem Design-Eingang suchen –