EFCore+Oracle根据不同的Schema连接数据库


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);

 

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:EF数据库框架:使用DbTypeName创建特殊参数类型(Oracle/MySql数据库)
下一篇:CSFramework.EF应用 - ASP.NETCore/WebApi使用IDatabase动态代理创建多个数据库实例
评论列表

发表评论

评论内容
昵称:
关联文章

EFCore+Oracle根据不同Schema连接数据库
CSFramework.EF 数据库框架支持Oracle+Schema
CSFramework.EF数据库框架应用Schema测试多种数据库(.NET8+EFCore
Oracle连接字符串ConnectionString连接数据库3种方式
Oracle连接服务名和数据库
EFCore+.NET8:使用Oracle数据库提交大图片文件需要指定BLOB类型
EFCore+Scheme(数据库架构)实现分库分表支持多种主流数据库解决方案
SqlConnectorV6.1 - 数据库连接工具
Oracle数据库:使用EFCore返回DataSet/DataTable数据表
Oracle数据库名称有小数点,使用expdp备份失败:ORA-12154: TNS: 无法解析指定连接标识符
CSFrameworkV6旗舰版 - Oracle数据库笔记
PL/SQL Developer连接Oracle数据库报错:ORA-12541:TNS:无监听程序
CSFramework.EF数据库框架简介(.NET8+EFCore
CSFrameworkV6软件开发框架 - Oracle数据库测试报告
开发框架是操作SQL数据库吧,支持Oracle数据库吗?
使用System.Data.OracleClient组件搭建Oracle数据库连接获取DataTable
企业版V4.0 - 支持MSSQL、MySQL、Oracle三种类型数据库
SqlConnectorV6.0 - 数据库连接工具操作手册
原创Winform快速开发框架平台Oracle版本(三层架构+C#.NET+Oracle数据库
Oracle SQL Developer+InstantClient客户端连接工具