EFCore+Oracle根据不同的Schema连接数据库
EFCore+Oracle根据不同的Schema连接数据库
目录
EFCore通过服务名(ServiceName)连接Oracle数据库,然后通过Schema访问指定的数据库。
以下是解决方案。
实体模型定义Schema
系统数据库
C# 全选
[Table("tb_MyUser", Schema = "CSFRAMEWORKV6_SYSTEM")]
public sealed class tb_MyUser
{
}
账套数据库
C# 全选
[Table("dt_CommonDataDict", Schema = "CSFRAMEWORKV6_NORMAL")]
public sealed class dt_CommonDataDict
{
}
其他数据库
C# 全选
[Table("Workflow", Schema = "CSFRAMEWORK_WORKFLOW")]
public class Workflow
{
}
DbContext重写OnModelCreating
C# 全选
public class OracleDbContext : GenericDbContext
{
public OracleDbContext(DbContextOptions options, DatabaseConfig databaseConfig)
: base(options, databaseConfig)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
if (!String.IsNullOrEmpty(_databaseConfig.Schema))
{
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
//获取[Table]特性的Schema定义
var schema = entityType.GetSchema();
if (String.IsNullOrEmpty(schema))
{
entityType.SetSchema(_databaseConfig.Schema);
}
}
}
//或者为特定的实体设置schema
//modelBuilder.Entity<YourEntity>().ToTable("TableName","SchemaName");
}
}
创建IDatabase实例
创建IDatabase实例时可以指定Schema
注意,在创建IDatabase数据库对象时可以指定Schema(既数据库名,如:CSFRAMEWORKV6_NORMAL)
C# 全选
IDatabase db = DatabaseFactory.GetDatabase(DatabaseType.Oracle, "", "CSFRAMEWORKV6_NORMAL");
var connstr = db.BuildConnectionString("120.79.85.97", 1521, "CSFrameworkV6_Normal", "user01", "123456");
db.ConnectionString = connstr;
var dt = db.GetServerTime();
ShowResult("oracle server time:" + dt.ToString());
一个IDatabase实例通过Schema访问多个数据库
测试场景:
C# 全选
IDatabase db = DatabaseFactory.GetDatabase(DatabaseType.Oracle, "", "");
var connstr = db.BuildConnectionString("120.79.85.97", 1521, "CSFrameworkV6_Normal", "user01", "123456");
db.ConnectionString = connstr;
var dt = db.GetServerTime();
ShowResult("oracle server time:" + dt.ToString());
//系统库
var q1 = db.GetQueryable<tb_DataSet>();
var list1 = q1.Take(10).ToList();
ShowGrid(list1);
//账套库
var q2 = db.GetQueryable<dt_CommonDataDict>();
var list2 = q2.Take(10).ToList();
ShowGrid(list2);
//其他库
var q3 = db.GetQueryable<Workflow>();
var list3 = q3.Take(10).ToList();
ShowGrid(list3);
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
CSFramework.EF C/S框架网