EFCore+Oracle根据不同的Schema连接数据库
EFCore+Oracle根据不同的Schema连接数据库
目录
EFCore通过服务名(ServiceName)连接Oracle数据库,然后通过Schema访问指定的数据库。
以下是解决方案。
实体模型定义Schema
2025-01-03:
注意:新版本CSFramework.EF使用 SchemaModelCacheFactory 解决OnModelCreating只会执行一次的问题,所以模型不需要定义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
{
}
GenericDbContext 重写OnModelCreating
C# 全选
//
//需要注意的是OnModelCreating只会执行一次,为了提高性能,EFCore对数据进行了缓存
//
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//重要:动态注册实体类,替换DbSet<>方式
foreach (var T in _databaseConfig.EntityTypes)
{
modelBuilder.Entity(T);
}
this.ConfigSchema(modelBuilder);
//外部扩展OnModelCreating
DatabaseEngine.OnModelCreating(modelBuilder);
}
创建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框架网