首页 > 解决方案 > 如何在 Entity Framework Core 运行时真正定位表

问题描述

我有KPI表格,现在它有超过 5 亿行。我想将此表拆分为KPI_Year2011, KPI_Year2012... KPI_2020(将于 2020 年 1 月 1 日创建)。

PS:所有表的结构相同,实体类型为KPI.

你将如何在运行时像这样定位表

public IActionResult GetKpis(int year) {
    /*var kpis = context.KPI.where(k => k.year == year).ToList(); */
    var kpis = context.SetTargetTable($"KPI_Year{year}").ToList();
    return View(kpis);
}

标签: c#entity-frameworkasp.net-coreentity-framework-coredbcontext

解决方案


对于您和您的程序,从逻辑上讲,这是一张大桌子。事实上,数据库需要将其拆分为多个较小的数据库以加快访问速度,这与您无关。

这称为分区,实际上应该是数据库的工作。

例如:

SQL Server 中的分区

Oracle 中的分区

Postgres 中的分区

MariaDB 中的分区

您可以在程序逻辑中手动实现它,但这只是意味着您重新发明轮子。事实上,可能是一个更蹩脚和更小轮子更频繁地断裂并且不适合你汽车的其余部分。

一旦你把这个工作交给数据库,你的问题就有了解决方案:什么都不做。您的程序甚至不知道它是数据库中的多个表。这是一个分区表。


推荐阅读