我有一个数据库第一个项目,其中包含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
答案 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。