首页 新闻 搜索 专区 学院

c# net core EntityFramework怎么操作动态表名隐射 并进行增删改查呢

0
[待解决问题]

遇到技术问题 新接触net core框架

问题:我们数据库有个表有3596万条数据 且这个表是每天产生大量数据的
现在这个表已经没办法执行查询了 数据量太大太卡了
然后我想到的解决方案是 每天或每月自动生成新表 表名命名规则:表名+日期格式

net core里面我们用的 EntityFramework生成的数据上下文操作表的增删改查吗
但是如果我要操作的表名是动态的
例如表名命名规则是 表名+日期格式
且间隔一段时间会生成新表
这种情况如何用数据上下文去操作这种动态表名的增删改查啊

< >
分享
所有回答(6)
0

EF都是通过表实体映射成类,然后操作类进行数据的增删改查。既然你的表是动态生成的,那么也要动态的生成实体。这个貌似做不到。。。

四月的凉风 | 园豆:8 (初学一级) | 2021-06-30 15:02

为啥不考虑使用Sql呢?EF也支持执行Sql的

支持(0) 反对(0) 四月的凉风 | 园豆:8 (初学一级) | 2021-06-30 15:03
0
  1. 写个job 去创建 动态table, 规则要定好,如table_202106
  2. 通过modelbuilder设置table名, 名字可以使用变量的。
    参考如下:
    void Microsoft.EntityFrameworkCore.Metadata.IMutableEntityType.SetTableName(string name)
    modelBuilder.Entity<entityclass>(entity =>{entity.ToTable("table_202106")});
又沙又甜 | 园豆:120 (初学一级) | 2021-06-30 15:54

谢谢

支持(0) 反对(0) 超好运央央 | 园豆:204 (菜鸟二级) | 2021-06-30 16:02
0

我想到了另一种解决方案了 我固定建32个表 表名就是从每月1号到31号 和一张历史数据表 然后每个月1号自动把1-31号表里上月的数据迁移到历史表里 因为页面上的数据展示需求只要当月的数据 然后基本上历史表是用不到的 这样的话这样的话数据上下文就是固定的32张表名

超好运央央 | 园豆:204 (菜鸟二级) | 2021-06-30 16:03
-1

其实还有有一个方法,虽然物理上有多个表,但是可以从逻辑上看作是有一个表。可以通过数据库自身提供的分区表功能,或者使用第三方的数据库中间件。

会长 | 园豆:10275 (专家六级) | 2021-06-30 18:14
0

你这相当于用用时间进行分表,这样有很多查询的SQL要修改,不是所有需求都要分表的。你这才3000W数据就说卡,我们有系统有个表快1亿了,还能正常,说明你们的数据库没有优化。可以尝试做读写分离。。这样改动的地方比较少。。

为乐而来 | 园豆:1377 (小虾三级) | 2021-07-01 10:10
0

在表数据未到达上亿的情况下可以通过一下方法解决思路:
通过索引和查询逻辑避免全表扫码和首次扫描记录的数;根据以下优先级顺序步骤测试优化

  1. 适当加上索引/组合索引(组合索引注意字段顺序,相同数据记录数量越少的越靠前),可以加快扫描记录的速度,不要太在乎索引数量的多少
  2. 加快照字段加入索引。如查询待评价的订单(订单中有多个明细)场景,需要在订单表加入快照字段待评价状态且加入索引
  3. 利用数据库自身提供的分区表功能
慧☆星 | 园豆:5555 (大侠五级) | 2021-07-02 10:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册