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


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

 

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:EF数据库框架:使用DbTypeName创建特殊参数类型(Oracle/MySql数据库)
下一篇:没有了
评论列表

发表评论

评论内容
昵称:
关联文章

EFCore+Oracle根据不同Schema连接数据库
EFCore+.NET8:使用Oracle数据库提交大图片文件需要指定BLOB类型
Oracle连接字符串ConnectionString连接数据库3种方式
Oracle数据库:使用EFCore返回DataSet/DataTable数据表
PL/SQL Developer连接Oracle数据库报错:ORA-12541:TNS:无监听程序
开发框架是操作SQL数据库吧,支持Oracle数据库吗?
使用System.Data.OracleClient组件搭建Oracle数据库连接获取DataTable
OracleEFCore使用OracleBulkCopy实现批量导入数据
企业版V4.0 - 支持MSSQL、MySQL、Oracle三种类型数据库
原创Winform快速开发框架平台Oracle版本(三层架构+C#.NET+Oracle数据库
SqlConnectorV6.0 - 数据库连接工具操作手册
Oracle SQL Developer+InstantClient客户端连接工具
Oracle数据库元数据查询(数据库、表结构、存储过程)
DbFramework数据库实体类对象模型框架( 支持MsSQL,MySQL,Oracle三种数据库
EFCore报错:OracleException: ORA-01465: 无效十六进制数字
sys_DataSN表DataCode和sys_DocNoRule表DocCode值有何不同?
C#多数据库组件包支持MSSQL+Oracle+MySQL+用户操作手册|C/S框架网
CSFramework对象模型框架(DbDataUpdate),支持MsSQL,MySQL,Oracle三种数据库操作
CSFramework通用自动提交数据工具类(DbDataUpdate),支持MsSQL,MySQL,Oracle三种数据库
DAL层连接数据库跨服务器进行数据交互对接