DbContext设置使用数据库的查询首先接近EF的位置

时间:2017-03-03 09:18:25

标签: c# entity-framework dbcontext ef-database-first

我有一个数据库第一个项目,其中包含ADO.NET Entity Data模型生成的类。我的所有类都有相同的布尔和日期时间字段,Ok和Date。我想创建从DbContext检索T类的通用方法,但我不知道如何使用该查询中的位置,因为我无法访问Ok和Date字段。

注意:我无法更改生成的类,我想避免使用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 个答案:

答案 0 :(得分: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 

现在您应该能够在实施中访问OK和Date。