TLDR:我有两个具有相同定义的表,我需要根据某个开关从一个表或中提取另一个。
例如,假设一个表包含一堆“通用” FooItem
和一个表包含“ Fancy”FooItem
...,并且两个表之间的唯一区别是名称SIMPLE_FOO
和FANCY_FOO
取决于布尔值,例如GetFancy == true
,我应该从FANCY_FOO
中读取,否则,请从SIMPLE_FOO
中读取。
[这在DbContext
中变得复杂。我的上下文中不能有多个DbSet<FooItem>
,并且不能动态地将ModelBuilder.Entity<FooItem>(e => e.ToView("pickOne"))
中的表名“注入” ...并且我不想复制整个dbContext只是为了拥有一个那里有不同的表名。
我确定解决方案很简单,但是我只是没有看到它。任何帮助表示赞赏。
EDIT:我无法更改数据库。这是一种愚蠢的方式,但是那是他们做到的方式,我必须忍受它。
您的解决方案中只有两个实体,每个表一个。它们可以从基类继承,因为它们是相同的。创建具有两个表中所有字段的基类“ 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); }
希望我能正确理解您的需求。