创建 DbContext
对于 Oracle 数据库,需要安装 Install-Package Chloe.Oracle 以及 Oracle 的驱动,然后使用 Chloe.Oracle.OracleContext 创建上下文实例。注意:DbContext 实例非线程安全,一定要避免多线程同时使用同一个 DbContext 对象。同时,用完务必要将 DbContext 释放。
因为框架本身需要与具体的数据库驱动解耦,所以 OracleContext 构造函数需要一个 IDbConnectionFactory 的参数,IDbConnectionFactory 接口只有一个 CreateConnection() 方法,必须先建个类,实现 CreateConnection 方法。
public class OracleConnectionFactory : IDbConnectionFactory
{
string _connString = null;
public OracleConnectionFactory(string connString)
{
this._connString = connString;
}
public IDbConnection CreateConnection()
{
OracleConnection oracleConnection = new OracleConnection(this._connString);
OracleConnectionDecorator conn = new OracleConnectionDecorator(oracleConnection);
return conn;
}
}
由于笔者使用的是 Oracle.ManagedDataAccess 数据库驱动,OracleConnection 创建的 DbCommand 默认是以顺序方式绑定参数,所以,上述例子使用了装饰者模式对 OracleConnection 封装了一遍,主要就是修改 DbCommand 参数绑定方式。OracleConnectionDecorator 定义如下:
///
/// 该装饰器主要修改参数绑定方式。
///
class OracleConnectionDecorator : DbConnectionDecorator, IDbConnection, IDisposable
{
OracleConnection _oracleConnection;
public OracleConnectionDecorator(OracleConnection oracleConnection) : base(oracleConnection)
{
this._oracleConnection = oracleConnection;
}
public override IDbCommand CreateCommand()
{
var cmd = this._oracleConnection.CreateCommand();
cmd.BindByName = true; //修改 DbCommand 参数绑定方式
return cmd;
}
}
接下来就可以创建 OracleContext:
string connString = "Your connection string";
OracleContext context = new OracleContext(new OracleConnectionFactory(connString));
OracleContext 生成 sql 语句时默认将表名和字段转成大写形式,如需要修改该默认设置,操作如下:
context.ConvertToUppercase = false;
ASP.NET CORE 配置 Service:
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddScoped((serviceProvider) =>
{
return new Chloe.Oracle.OracleContext(new OracleConnectionFactory("Your connection string"));
});
//...
}