7

請告訴我的db.database.ExecuteSQLCommand相當於EF 7

db.Database.ExecuteSqlCommand(Sql.ToString()); 

在實體框架7的相同呢?我在Beta 4中看到了.FromSQL(),但上面沒有看到任何東西。

+0

** **更新 - 目前,'ExecuteSQLCommand'可用於實體框架核心。但是,您需要添加'using Microsoft.EntityFrameworkCore;' – kimbaudi

回答

8

該功能尚未實現。使用問題#624跟蹤其進度。以下是您現在可以使用的粗略擴展方法。

public static int ExecuteSqlCommand(this RelationalDatabase database, string sql) 
{ 
    var connection = database.Connection; 
    var command = connection .DbConnection.CreateCommand(); 
    command.CommandText = sql; 

    try 
    { 
     connection.Open(); 

     return command.ExecuteNonQuery(); 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 

使用方法如下:

db.Database.AsRelational().ExecuteSqlCommand("EXEC MySproc"); 

注意,這並沒有考慮到任何活動的事務。

+0

我將在DbContext上創建一個擴展,它讀出連接字符串,並生成一個與SqlCommand分開的SqlConnection。也許這將是我的「暫時」修復:) – NicoJuicy

+1

@NicoJuicy好主意。 :)我已經更新了我的答案。 – bricelam

+0

你應該使用「使用」,但放棄try catch ...你不會知道這裏有什麼問題。接受你的答案。爲什麼要擴展RelationalDatabase?我擴展了DbContext,所以你可以使用像db.executeSql(「SQL QUERY」); (剛開始使用Asp.Net 5所以,所以使我^^) – NicoJuicy

6

只是想提供一個最新的方式來使用這個與實體框架核心RC1的更新。

有關於在Microsoft.Data.Entity命名空間,你可以爲使用DatabaseFacade類的extentsion如下:

_dbContext.Database.ExecuteSqlCommand("EXEC MySproc"); 
+2

這已被移至RTM中的'Microsoft.EntityFrameworkCore'命名空間 –