簡體   English   中英

通用存儲庫的靜態成員/類

[英]Static member/class for generic repository

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

我需要將其更改為靜態類。以下是新的存儲庫。

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

通用存儲庫的此靜態方法正確嗎? ..請建議我

我的理解是擴展方法作用於類的實例。 在您的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;
}

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM