の同等のパラメータ、接続プロパティ、私たちは以下のようParameters
、Connection
などを読み取るためにObjectQuery
のうち、Context
に到達することができました:EFのObjectQuery <T>コンテキスト、Entity Frameworkの以前のバージョンのDbSet <T>
DbSet<T>
オブジェクトを見てみると
var query = (ObjectQuery<T>)source;
cmd.Connection = (SqlConnection)((EntityConnection)query.Context.Connection).StoreConnection;
cmd.Parameters.AddRange(
query.Parameters.Select(x => new SqlParameter(
x.Name, x.Value ?? DBNull.Value)
).ToArray()
);
、私はこれの任意の等価を見つけることができません。ここでの目的は、クエリを操作してその結果を取得する拡張機能を作成することです。ここで
はインスタンスです:http://philsversion.com/2011/09/07/async-entity-framework-queries
または私はDbContext
クラスの拡張機能を記述し、Set
方法で動作するはずですか?
ここで
編集
は、私がこれまで何をしたかです。これまでの基本的な実装ではありますが、生産の準備ができていません。これに関する提案はありますか?
public static async Task<IEnumerable<T>> QueryAsync<T>(this DbContext @this, System.Linq.Expressions.Expression<Func<T, bool>> predicate = null)
where T : class {
var query = (predicate != null) ? @this.Set<T>().Where(predicate) : @this.Set<T>();
var cmd = new SqlCommand();
cmd.Connection = (SqlConnection)(@this.Database.Connection);
cmd.CommandText = query.ToString();
if (cmd.Connection.State == System.Data.ConnectionState.Closed) {
cmd.Connection.ConnectionString = new SqlConnectionStringBuilder(cmd.Connection.ConnectionString) {
AsynchronousProcessing = true
}.ToString();
cmd.Connection.Open();
}
cmd.Disposed += (o, e) => {
cmd.Clone();
};
var source = ((IObjectContextAdapter)@this).ObjectContext.Translate<T>(
await cmd.ExecuteReaderAsync()
);
return source;
}
私はPOCOとのIQueryableインターフェイス上AsSyncようextensionmethodを大好きです。申し訳ありませんが答えを持っている、しかし、私はhttp://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015385-support-for-asynchronous-で投票しませんでしたクエリ – rfcdejong
@rfcdejong私も同様に投票しました。また、私は何かを書いた。更新された質問をご覧ください。 – tugberk
それは本当にhopefullに見える;)しかし、将来的にクローズ横に異なるConnectionStatesがあるかもしれない心に留めておきます。接続、実行、フェッチ、破損など。 – rfcdejong