2017-03-03 56 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

非常感謝您的幫助,使我獲得最終解決方案 –

相關問題