oracle 将同一模型Map到EF Core中的多个表

brtdzjyr  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(94)

我有一个(非常旧的)Oracle数据库,其中有多个(数百个)表,其名称遵循以下模式:

FOO_{code}

其中code是两个字母后跟两个数字。
我想将所有这些表Map到同一个实体(它们都有相同的列)。这些表可以在运行时创建,所以我需要使用某种模式Map它们。EF Core(6)可以吗?我想我几个月前找到了一个帖子,但我再也找不到了。
我们不使用脚手架。

pgpifvop

pgpifvop1#

您可以使用linq2db.EntityFrameworkCore扩展。它取代了EF Core LINQ translator并允许这样的查询(仅当在查询中使用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()

相关问题