我有2个类,它们代表数据库中的同一张表,不同之处在于这些类的属性。我使用这种方式是因为应用程序将连接到的数据库中的自定义字段有所不同。
[Table("T1")]
public class Class1
{
.
.
}
[Table("T1")]
public class Class2
{
.
.
}
现在我正在使用set方法来获取数据。我尚未在数据库上下文中声明任何内容。
DbSet<Class1> set = context.Set<Class1>();
return set.Where(p => p.Active == "Y");
但是系统抛出错误
'实体类型'Class1'不是当前上下文模型的一部分'
我试图实现的是动态定义DbSet的模型,这是否可以通过其他方式实现?
要使用DbContext.Set<T>()
方法,您的上下文需要具有匹配的DbSet<T>
属性。如果您设置了其中一个表发生更改的设置,则有两个选项。
将DbSet<Class1>
和DbSet<Class2>
属性都添加到DbContext
:
public DbSet<Class1> Class1s { get; set; }
public DbSet<Class2> Class2s { get; set; }
具有通用上下文,并使更改的表继承自公共库。例如:
public class BaseClass
{
//shared properties go in here
}
public class Class1 : BaseClass
{
//custom properties here
}
public class Class2 : BaseClass
{
//custom properties here
}
您的上下文可能看起来像这样:
public class MyContext<T> : DbContext
where T : BaseClass
{
public DbSet<T> Class1s { get; set; }
}