【发布时间】:2020-04-21 09:09:44
【问题描述】:
我有 2 个类代表数据库中的同一个表,不同之处在于这些类的属性。我之所以使用这种方式,是因为应用程序将连接到的数据库中的自定义字段存在差异。
[Table("T1")]
public class Class1
{
.
.
}
[Table("T1")]
public class Class2
{
.
.
}
这里现在我使用 set 方法来获取数据。我没有在 DB 上下文中声明任何内容。
DbSet<Class1> set = context.Set<Class1>();
return set.Where(p => p.Active == "Y");
但是系统报错
'实体类型'Class1'不是当前上下文模型的一部分'
我想要实现的是动态定义 DbSet 的模型,这可能以其他方式吗?
【问题讨论】:
-
您的上下文中是否有
DbSet<Class1>类型的 DbSet? -
即使我有 table 属性,我也必须包含它?那么我应该如何动态更改要使用的类呢?就像在某些情况下我必须使用class1,其他情况下使用class2。
-
您始终需要在您的上下文中匹配
DbSet。它怎么可能在两个班级之间改变,这没有意义?你的数据库不会突然改变吧? -
所以同一个应用程序将用于两个具有相似结构的数据库,但是由于表中的自定义字段,两者的表结构不同。所以我的理解是我可以根据运行时的要求使用两个类。顺便说一句,为什么我们在上下文中声明 DBSet 时甚至需要“Set”?
-
本例中的
Table属性只是设置要使用的表名,上下文还需要有DbSet<Class1>等,注册。根据您之前的评论,您确定拥有两个单独的上下文,每个数据库一个上下文不是更好吗?并使用在运行时相关的任何上下文,而不是可以与任一数据库一起使用的上下文。
标签: c# .net entity-framework