【发布时间】:2022-10-02 22:04:24
【问题描述】:
我有许多表具有相同的模型结构,但表名和数据不同。
例如
//Model
public class pgl1
{
public string id {get;set;}
public string name {get;set;}
}
public class pgl2
{
public string id {get;set;}
public string name {get;set;}
}
我在数据库中的表是pgl_1、pgl_2、pgl_3 等...
上下文类 -
public class MyContext : DbContext
{
public DbSet<pgl1>? pgl_1{ get; set; } //pgl_1 is database table name
public DbSet<pgl2>? pgl_2{ get; set; } //pgl_2 is database table name
}
我将在下面使用它来实现它。
var context = new MyContext();
List<<*pgl1>> list1 = new List<<*pgl1>>();
listb = context.pgl1.ToList<<*pgl1>>();
List<<*pgl2>> list2 = new List<<*pgl2>>();
list2 = context.pgl2.ToList<*pgl2>>();
我只想要一个模型和一个 Dbset 用于多个表。
这可能吗。
我为此搜索了很多,但没有得到任何适当的解决方案。
任何答案都会非常有帮助。
谢谢。
-
this 会回答你的问题吗?
-
也许你不需要EF?它不是为在这种动态环境中工作而设计的。
linq2db将轻松处理。 -
EF 是一个 ORM - 它将对象映射到关系表。 DbSet<T> 不代表数据库表,它代表应用程序实体。此外,你为什么有这么多桌子?你怎么知道每次选哪张桌子?也许 EF 已经处理了你的真实的问题,只是不像你想象的那样?
-
为什么一开始就有这么多相同的表?实现继承?分区?多租户?所有这些都可以以更清洁的方式处理。 EF 已经支持继承。分区是一个数据库问题,大多数时候你不需要有多个表。例如,所有受支持的 SQL Server 版本都具有表分区,即使是 Express 版本。没有理由使用
pg_2022和pg_2021。可以使用拦截器、全局查询过滤器或使用 DbContextFactory 的动态连接字符串来处理多租户 -
在 SQL Server(和大多数数据库)中,您还可以使用 partitioned views 来组合所有表中的数据,因此 EF 只需映射到该视图
标签: asp.net-core entity-framework-core