通用存储库的静态成员/类

时间:2017-06-01 11:40:44

标签: c# asp.net-core dapper

我有dapper通用存储库类,因为.net核心不支持分布式事务我决定将已经打开的连接对象发送到泛型方法而不是在存储库中单独注入。

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;
    }
} 

我需要将其更改为静态类.below是新的存储库。

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;
    }
} 

这种通用存储库的静态方法是否正确? ..Pls建议我

1 个答案:

答案 0 :(得分:1)

我的理解是扩展方法作用于类的实例。在Get()方法中,该实例是连接参数。但是,您似乎在覆盖Get()方法中的连接实例。这可能是不可取的。

您可能不想创建扩展方法。也许你只想要一个可以接受IComplianceConnection参数的静态方法。

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;
}

希望这有帮助!