EF核心-从两个相同的表中提取数据

问题描述 投票:0回答:1

TLDR:我有两个具有相同定义的表,我需要根据某个开关从一个表中提取另一个。

例如,假设一个表包含一堆“通用” FooItem和一个表包含“ Fancy”FooItem...,并且两个表之间的唯一区别是名称SIMPLE_FOOFANCY_FOO

取决于布尔值,例如GetFancy == true,我应该从FANCY_FOO中读取,否则,请从SIMPLE_FOO中读取。

[这在DbContext中变得复杂。我的上下文中不能有多个DbSet<FooItem>,并且不能动态地将ModelBuilder.Entity<FooItem>(e => e.ToView("pickOne"))中的表名“注入” ...并且我不想复制整个dbContext只是为了拥有一个那里有不同的表名。

我确定解决方案很简单,但是我只是没有看到它。任何帮助表示赞赏。

EDIT:我无法更改数据库。这是一种愚蠢的方式,但是那是他们做到的方式,我必须忍受它。

c# asp.net-core entity-framework-core dbcontext ef-core-2.2
1个回答
0
投票

您的解决方案中只有两个实体,每个表一个。它们可以从基类继承,因为它们是相同的。创建具有两个表中所有字段的基类“ BaseFooItem”。然后为每个变量(Simple和Fancy)创建一个实体类,并注释每个变量以匹配必要的表名;例如:]]

[Table("SIMPLE_FOO")]
public class SimpleFooItem: BaseFooItem {
}

如果您不想使用数据注释,也可以使用FluentAPI设置表名。然后为每个实体创建一个DbSet:

    public DbSet<SimpleFooItem> SimpleFooItems { get; set; }
    public DbSet<FancyFooItem> FancyFooItems { get; set; }

然后在任何一个DbSet之间进行切换的条件,例如:

if (GetFancy) {
   return dbContext.FancyFooItems.SingleOrDefault(a => a.Id == id);
} else {
   return dbContext.SimpleFooItems.SingleOrDefault(a => a.Id == id);
}

希望我能正确理解您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.