2017-03-03 72 views
0

我有一个数据库第一个项目,它带有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 

回答

1

定义的界面处的公共属性:

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 

现在您应该可以在实施中访问“确定”和“日期”。

+0

我做了更改,建议您可以在编辑1中看到它们,不幸的是我在dbData查询中得到“无法解析符号确定”。你知道为什么吗? –

+0

嗯,也许我没有想到这一点,EF无法将查询翻译成SQL。为了验证这个假设,请尝试在内存中通过枚举运行查询:var dbData = DbContext.Set(typeof(T))。AsNoTracking()。ToList()。其中​​(x => x.Ok);' –

+0

非常感谢您的帮助,使我获得最终解决方案 –

相关问题