2

次のようなコマンドを実行するにはどうすればよいですか。

SELECT * FROM CATS

それは私がやったのとまったく同じように動作しmyContext.Cats.Where(c => true);ますか?

Google は提案しましcontext.Database.ExecuteSqlCommand()たが、それは int を返します。有望に見える context.Database.SqlQuery もありますが、返されたエンティティは追跡されていないと書かれており、これは重要であると思われます (追跡に関して EF がどのように機能するかについてはよくわかりません)。

追跡に使用することを提案しSystem.Data.Entity.DbSet<TEntity>.SqlQuery(Object[])ていますが、これが何を意味するのか、どのように実装するのか完全にはわかりません。

さらに混乱させることに加えて、任意のテーブルに対して特定のクエリを実行できるようにする汎用メソッドを作成したいと考えています。

これは、擬似コードで何が欲しいかの大まかな例です

public DbSet<T> ExecuteSelect<T>(DbContext context, string table)
{
     DbSet<T> entities = context.RunSql("SELECT * FROM " + table);

     return entities;
}

何か案は?

4

2 に答える 2

2

これによると:http://msdn.microsoft.com/en-us/data/jj592907.aspx次が必要です:

public IEnumerable<T> ExecuteSelect<T>(DbContext context, string table)
{
     IEnumerable<T> entities = context.Set<T>.SqlQuery("SELECT * FROM " + table).ToList();

     return entities;
}

myContext.Cats.Where(c => true)戻りますIQueriable<Cat>(DbSet ではありません)

しかし

返されたセットは実際にはすでにファイナライズされているため (たとえば、後でクエリに余分なビットを追加することはできません)、Queriable を持つことは誤った方向付けになります。

于 2013-06-07T13:04:03.897 に答える