簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM