DbContext使用数据库第一种方法进行查询设置EF
问题描述:
我有一个数据库第一个项目,它带有ADO.NET实体数据模型生成的类。我所有的类都有相同的布尔和日期时间字段,Ok和Date。我想创建从DbContext检索T类的泛型方法,但我不知道如何使用该查询中的位置,因为我无法访问Ok和Date字段。DbContext使用数据库第一种方法进行查询设置EF
注:我不能改变生成的类,我想尽量避免使用Linq.Dynamic
ADO.Net产生
public partial class First
{
public int Id { get; set; }
public string NameFirst { get; set; }
public DateTime Date { get; set; }
public bool Ok { get; set; }
}
public partial class Second
{
public int Id { get; set; }
public string NameSecond { get; set; }
public DateTime Date { get; set; }
public bool Ok { get; set; }
}
检索数据
public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date)
{
var dbData = DbContext.Set(typeof(T)).AsNoTracking().Where(x => x.Ok ???);
//remap to some model and return it
...
return someModel;
}
编辑1 :
public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date) where T : IDateOk
{
var dbData = DbContext.Set(typeof(T)).AsNoTracking().Where(x => x.Ok &&);
//remap to some model and return it
...
return someModel;
}
public interface IDateOk {
DateTime Date { get; set; }
bool Ok { get; set; }
}
编辑2: 我错过了类方法,所以它应该是这样的
public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date) where T : class IDateOk
答
定义的界面处的公共属性:
public interface IDateOk {
DateTime Date { get; set; }
bool Ok { get; set; }
}
这里是一个教程如何将接口添加到生成的类: Getting the Entity Framework to Generate an Interface for Mocking
约束你的方法,要求该接口:
public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date) where T: IDateOk
现在您应该可以在实施中访问“确定”和“日期”。
我做了更改,建议您可以在编辑1中看到它们,不幸的是我在dbData查询中得到“无法解析符号确定”。你知道为什么吗? –
嗯,也许我没有想到这一点,EF无法将查询翻译成SQL。为了验证这个假设,请尝试在内存中通过枚举运行查询:var dbData = DbContext.Set(typeof(T))。AsNoTracking()。ToList()。其中(x => x.Ok);' –
非常感谢您的帮助,使我获得最终解决方案 –