Ich habe dapper generische Repository-Klasse, da .net-Core keine verteilte Transaktion unterstützt Ich habe beschlossen, bereits geöffnetes Verbindungsobjekt an generische Methode zu senden, anstatt separat in das Repository zu injizieren.
public class Repository<T> where T: class
{
protected readonly IComplianceConnection Connection;
public Repository(IComplianceConnection connection)
{
Connection = connection;
}
public IEnumerable<T> Get(string query, object arguments)
{
IList<T> entities;
using (var connection = Connection.OpenConnection())
{
entities = connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).ToList();
}
return entities;
}
}
Ich muss dies in statische Klasse ändern. Unter ist das neue Repository.
public static class Repository<T> where T: class
{
public static IEnumerable<T> Get(this IDbConnection connection, string query, object arguments)
{
IList<T> entities;
entities = connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).ToList();
return entities;
}
}
Ist diese statische Methode für das generische Repository korrekt? ..Pls schlagen Sie mir vor
Nach meinem Verständnis wirken Erweiterungsmethoden auf eine Instanz einer Klasse. In Ihrer Methode Get () ist diese Instanz der Verbindungsparameter. Es scheint jedoch so, als ob Sie die Verbindungsinstanz in Ihrer Methode Get () überschreiben. Dies kann nicht erwünscht sein.
Wahrscheinlich möchten Sie keine Erweiterungsmethode erstellen. Vielleicht möchten Sie nur eine statische Methode, die einen IComplianceConnection-Parameter akzeptiert.
public static IEnumerable<T> Get(IComplianceConnection complianceConnection, string query, object arguments)
{
IList<T> entities;
using (var connection = complianceConnection.OpenConnection())
{
entities = connection.Query<T>(query, arguments, commandType: CommandType.StoredProcedure).ToList();
}
return entities;
}
Hoffe das hilft!