2017-03-03 5 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 interface IDateOk { 
    DateTime Date { get; set; } 
    bool Ok { get; set; } 
} 

はにインターフェイスを追加する方法のチュートリアルです: それは

public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date) where T : class IDateOk 

答えて

1

は、共通のプロパティのインターフェイスを定義し、このようにする必要がありますので、私はこの方法でクラスを行方不明になりました生成されたクラス:

public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date) where T: IDateOk 
012: Getting the Entity Framework to Generate an Interface for Mocking

は、このインタフェースを必要とするためにあなたの方法を拘束し

これで、実装でOKとDateにアクセスできるはずです。

+0

私はあなたが編集1でそれらを見ることができると示唆した変更を加えました。残念ながら、dbDataクエリで "Can not resolve symbol Ok"が表示されます。なぜなのかご存知ですか? –

+0

多分、私はこれを考えず、EFがクエリをSQLに変換できないと思いました。この仮説をテストするには、まず、以下を列挙してメモリ内のクエリを実行してみてください: 'var dbData = DbContext.Set(typeof(T))AsNoTracking().ToList()。Where(x => x.Ok);' –

+0

最終的な解決に導いてくれてありがとう –

関連する問題