创建一个处理 DatabaseFactory 的 DbContext 以更轻松地使用 DapperExtensions
Create a DbContext that handle a DatabaseFactory to use DapperExtensions more easily
这几天我尝试使用 DapperExtensions 提出的一些基本 CRUD 功能创建一个抽象的基础存储库。但是作为示例给出的代码使用了一个 SqlConnection 来连接到 SQL Server 数据库。我希望能够连接到所有类型的数据库(SQL 服务器、MySql 等...)。他们的代码示例也为每个 CRUD 函数重复,如下面的代码所示
using (SqlConnection cn = new SqlConnection(_connectionString))
{
cn.Open();
//Code doing something here...
cn.Close();
}
所以我在考虑创建一个 DbContext 来处理连接的创建、打开和关闭,还可以根据数据库类型创建正确的连接对象我想使用(一种数据库工厂)。
是否有人已经完成并可以分享他的代码?
谢谢大家!
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;
}
}
您正在使用 Dapper-Extensions;以下代码仅适用于 Dapper。但它并没有改变整个概念。而不是 sql
你需要传递 poco
.
请参阅 this 答案了解我如何实施 IUnitOfWork
和 DalSession
。在下面的代码中,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 的示例代码,请参阅我最近发布的 答案。
这几天我尝试使用 DapperExtensions 提出的一些基本 CRUD 功能创建一个抽象的基础存储库。但是作为示例给出的代码使用了一个 SqlConnection 来连接到 SQL Server 数据库。我希望能够连接到所有类型的数据库(SQL 服务器、MySql 等...)。他们的代码示例也为每个 CRUD 函数重复,如下面的代码所示
using (SqlConnection cn = new SqlConnection(_connectionString))
{
cn.Open();
//Code doing something here...
cn.Close();
}
所以我在考虑创建一个 DbContext 来处理连接的创建、打开和关闭,还可以根据数据库类型创建正确的连接对象我想使用(一种数据库工厂)。
是否有人已经完成并可以分享他的代码?
谢谢大家!
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;
}
}
您正在使用 Dapper-Extensions;以下代码仅适用于 Dapper。但它并没有改变整个概念。而不是 sql
你需要传递 poco
.
请参阅 this 答案了解我如何实施 IUnitOfWork
和 DalSession
。在下面的代码中,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 的示例代码,请参阅我最近发布的