[英]Is it possible to execute custom SQL query using EF7
我決定將我的一個項目移到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,B中選擇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");
看起來您可以在傳遞給Up和Down方法的migrationBuilder對象上使用Sql方法。 至少在rc2。
protected override void Up(MigrationBuilder migrationBuilder)
{
...
migrationBuilder.Sql("<Sql here>");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.