2017-06-01 35 views
0

由于.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; 
    } 
} 

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

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建议我

+0

1.我不认为使用是“合适的”,也许连接已经建立??。 2.为什么你不把这个方法放在DbContext上? – Max

+0

您可否提供示例代码? – Ljt

回答

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

希望这有助于!