我有一个(非常旧的)Oracle数据库,其中有多个(数百个)表,其名称遵循以下模式:
FOO_{code}
其中code是两个字母后跟两个数字。我想将所有这些表Map到同一个实体(它们都有相同的列)。这些表可以在运行时创建,所以我需要使用某种模式Map它们。EF Core(6)可以吗?我想我几个月前找到了一个帖子,但我再也找不到了。我们不使用脚手架。
code
pgpifvop1#
您可以使用linq2db.EntityFrameworkCore扩展。它取代了EF Core LINQ translator并允许这样的查询(仅当在查询中使用linq2db方法时)。免责声明,我是创作者之一。您可以为此类表定义单个实体,例如:
linq2db
public class Foo { ... }
使用扩展,您可以动态更改表名。举例来说:
var current = "001"; var other = "002"; var query = from f in context.Foo.ToLinqToDBTable().TableName("FOO_" + current) join b in context.Set<Foo>().ToLinqToDBTable().TableName("FOO_" + other) on f.Id equals b.Id select new { f, b };
作为奖励,您将获得批量操作,临时表,CTE等的访问权限。注意,它可能会与EF Core的xmlc方法发生冲突,因此您可以使用ToListAsyncLinqToDB()而不是ToListAsync()。
ToListAsyncLinqToDB()
ToListAsync()
1条答案
按热度按时间pgpifvop1#
您可以使用linq2db.EntityFrameworkCore扩展。它取代了EF Core LINQ translator并允许这样的查询(仅当在查询中使用
linq2db
方法时)。免责声明,我是创作者之一。您可以为此类表定义单个实体,例如:
使用扩展,您可以动态更改表名。举例来说:
作为奖励,您将获得批量操作,临时表,CTE等的访问权限。
注意,它可能会与EF Core的xmlc方法发生冲突,因此您可以使用
ToListAsyncLinqToDB()
而不是ToListAsync()
。