当前位置:
首页 > temp > python入门教程 >
-
比EntityFramework简单很多的SOD框架动态创建表的方法
今天看到一篇博文EntityFramework Core如何映射动态模型? ,文章讲的是如何用EF动态创建表的问题,比如根据时间动态创建一个表,这种场景常出现在应用系统的日志记录功能中。原文用EF实现非常复杂,相比而言,SOD框架就要简单很多。
下面直接给出SOD框架的方案。
public class User : EntityBase { public User() { TableName="Tb_User"; IdentityName = "UserID"; PrimaryKeys.Add("UserID"); } /// <summary> /// 设置字段名数组,如果不实现该方法,框架会自动反射获取到字段名数组,因此从效率考虑,建议实现该方法 /// </summary> protected override void SetFieldNames() { PropertyNames = new string[] { "UserID", "Name", "Pwd", "RegistedDate" }; } public int ID { get { return getProperty<int>("UserID"); } set { setProperty("UserID", value); } } public string Name { get { return getProperty<string>("Name"); } set { setProperty("Name", value, 50); } } public string Pwd { get { return getProperty<string>("Pwd"); } set { setProperty("Pwd", value, 50); } } public DateTime RegistedDate { get { return getProperty<DateTime>("RegistedDate"); } set { setProperty("RegistedDate", value); } } //重写 GetTableName,实现分表方法 public override string GetTableName() { if (this.ID < 1000) return "Users"; else if (this.ID < 2000) return "1000"; //分表 else Schema = "DbPart1].[dbo"; //指定架构分库 return "Users2000"; } } public class LocalDbContext : DbContext { public LocalDbContext() : base("local") { //local 是App.config/Web.config 配置文件连接字符串的名字 //在命令管道中注册日志处理器和Oracle命令处理器 //base.CurrentDataBase.RegisterCommandHandle(new CommandExecuteLogHandle()); //base.CurrentDataBase.RegisterCommandHandle(new OracleCommandHandle()); } #region 父类抽象方法的实现 protected override bool CheckAllTableExists() { //创建用户表 //CheckTableExists<User>(); //用下面的方式可以做些表创建后的初始化 //InitializeTable<User>("insert into {0}([Name],[Pwd]) values 'Admin','888888')"); User user= new User(); user.ID=1500; //将使用分区表 //根据实体类的表分区函数,动态检查和创建表 CheckTableExists<User>(user); return true; } #endregion }
如上面的示例,在CheckAllTableExists 方法中使用实体类实例来检查和创建表,这样就可以实现动态创建表了。
关于如何动态查询表,可以参考《SOD框架“企业级”应用数据架构实战》一书的【6.9.6SOD 框架分库分表】。
文章出处:https://www.cnblogs.com/bluedoctor/p/14343999.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数