EF7を使用してカスタムSQLクエリを実行することは可能ですか

c# entity-framework-core

質問

私は自分のプロジェクトの1つをEntity Framework 7(rc1-final)に移すことに決めました。私はSQL ServerとEntityFramework.MicrosoftSqlServerをターゲットにしていますEntityFramework.MicrosoftSqlServerパッケージもインストールされています。

私は1つの問題があります:DBからいくつかのオブジェクトをフェッチするためにカスタムSQLクエリを実行できないようです。

DatabaseFacadeオブジェクト( DbContext.Databaseプロパティでアクセス可能)は、拡張メソッドExecuteSqlCommand (何も返さない)を提供しますが、オブジェクトを取得するSqlQuery<T>メソッドは提供しません。どちらの方法も古き良きEF 6で利用できましたが、新しいEF 7は最初のものだけを宣言しています。

したがって、 SqlQuery<T>メソッドはまだここにありますが、移動または名前が変更されましたか、それとも新しいEF実装から完全に削除されましたか?

もちろん、 SqlCommandとそのExecuteReaderメソッドを使用して冗長な方法で解決することは絶対に可能ですが、避けることをおSqlCommandします。

受け入れられた回答

EntityFramework.Relationalは次の拡張メソッドを公開します。

public static IQueryable<TEntity> FromSql<TEntity>(
        [NotNull] this IQueryable<TEntity> source,
        [NotNull] [NotParameterized] string sql,
        [NotNull] params object[] parameters)
        where TEntity : class

あなたはこれを行うことができます。

myDatabaseContext.Customers.FromSql("SELECT * FROM Customers WHERE Name='p0'", "timothy");

人気のある回答

EF7でカストムなSQLクエリを実行するには、SQLクエリの構造のような構造を返す "偽の"テーブルを作成することができます。

例: "aA、bBをA、Bから選択すると、a.b_id = b.id"となります。偽のテーブルには、A、Bのような2つの列が含まれます。あなたのプログラムでは、これを行うことができます:

var result = myDatabaseContext.FakeTables.FromSql("select a.A, b.B from A,B where a.b_id=b.id");


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ