1

这几天,我尝试使用DapperExtensions提出的一些基本 CRUD 函数创建一个抽象的基础存储库。但是作为示例给出的代码使用了用于连接到 SQL Server 数据库的 SqlConnection。我希望能够连接到所有类型的数据库(SQL Server、MySql 等......)。他们的代码示例也针对每个 CRUD 函数重复,如下面的代码所示

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    //Code doing something here...
    cn.Close();
}

所以我正在考虑创建一个DbContext来处理连接的创建、打开和关闭,还可以根据我要使用的数据库类型(一种数据库工厂)创建正确的连接对象。

有没有人已经做过并且可以分享他的代码?

感谢你们 !

4

2 回答 2

0
public abstract class ABaseRepository<M> : IBaseRepository<M>
        where M : BaseModel
    {
        private static DbProviderFactory factory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ProviderName);
        protected static DbConnection connection;

    public static IDbConnection CreateOpenConnection()
    {
        connection = factory.CreateConnection();
        connection.Open();

        return connection;
    }

    public dynamic Insert(M model)
    {
        dynamic multiKey;
        using (IDbConnection con = CreateOpenConnection())
        {
            multiKey = con.Insert(model);
        }

        return multiKey;
    }
 }
于 2017-02-27T09:29:00.450 回答
0

您正在使用 Dapper-Extensions;以下代码仅适用于 Dapper。但这并没有改变整个概念。而不是sql你需要通过poco

请参阅答案以了解我如何实现IUnitOfWorkDalSession. 在下面的代码中,BaseDal就像BaseRepository.

public abstract class BaseDal
{
    internal BaseDal(IUnitOfWork unitOfWork)
    {
        dapperHandler = new DapperHandler(unitOfWork);
    }

    DapperHandler dapperHandler = null;

    protected T Get<T>(string sql, DynamicParameters param) where T : class
    {
        var result = dapperHandler.Query<T>(sql, param).FirstOrDefault();
        return result;
    }

    protected List<T> GetList<T>(string sql, DynamicParameters param) where T : class
    {
        var result = dapperHandler.Query<T>(sql, param).ToList();
        return result;
    }

    protected int Insert(string sql, DynamicParameters param)
    {
        var result = dapperHandler.Execute(sql, param);
        return result;
    }
}

编辑 1 例如带有 Dapper-Extensions 的代码,请参阅我最近发布的这个答案。

于 2017-02-27T12:53:22.950 回答