是否可以使用EF7執行自定義SQL查詢

c# entity-framework-core

我決定將我的一個項目移到Entity Framework 7(rc1-final)。我的目標是SQL Server和EntityFramework.MicrosoftSqlServer包也已安裝。

我只有一個問題:似乎我無法執行自定義SQL查詢以從DB中獲取某些對象。

DatabaseFacade對象(可以通過DbContext.Database屬性訪問)提供了一個擴展方法ExecuteSqlCommand (不返回任何內容),但它不提供允許獲取對象的SqlQuery<T>方法。這兩種方法都適用於老式的EF 6,但是新的EF 7只聲明了第一種方法。

那麼, SqlQuery<T>方法仍然在這裡(但移動/重命名)或者它是否完全從新的EF實現中刪除了?

當然,絕對有可能以冗長的方式解決它(使用SqlCommand及其ExecuteReader方法),但我更願意避免它。

一般承認的答案

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查詢的結構類似。

示例:您的查詢是: “從A中選擇aA,bB,其中a.b_id = b.id” 。假表將包含2列,如A,B。在您的程序中,您可以這樣做:

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
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow