EF 7 中的 db.database.ExecuteSQLCommand 等效项
Posted
技术标签:
【中文标题】EF 7 中的 db.database.ExecuteSQLCommand 等效项【英文标题】:db.database.ExecuteSQLCommand equivalent in EF 7 【发布时间】:2015-05-26 22:48:52 【问题描述】:什么相当于
db.Database.ExecuteSqlCommand(Sql.ToString());
在实体框架 7 中?我在 beta 4 中看到了 .FromSQL(),但没有看到上述任何内容。
【问题讨论】:
更新 - 目前,ExecuteSQLCommand
可以在 Entity Framework Core 中使用。但是,您需要添加using Microsoft.EntityFrameworkCore;
【参考方案1】:
该功能尚未实现。使用问题#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");
注意,这不考虑任何活跃的交易。
【讨论】:
我将在 DbContext 上创建一个扩展,读取连接字符串并使用 SqlCommand 生成单独的 SqlConnection。也许那将是我的“临时”修复:) 你应该使用“using”并放弃try catch...你不会知道这里有什么问题。接受了你的回答。扩展 RelationalDatabase 的任何原因?我扩展了 DbContext,这样你就可以使用 db.executeSql("SQL QUERY"); (刚开始使用Asp.Net 5,所以启发我^^) 更新了代码,我真的很讨厌try catch,因为它隐藏了错误:) 它不会隐藏错误——没有任何问题。它只是确保在出现错误时关闭连接。 另外,DbCommand 不打算被处置。 Dispose 方法是从 Component 派生的不幸结果。【参考方案2】:只是想为 Entity Framework Core RC1 提供最新方法的更新。
Microsoft.Data.Entity 命名空间中的 DatabaseFacade 类有一个扩展,您可以按如下方式使用:
_dbContext.Database.ExecuteSqlCommand("EXEC MySproc");
【讨论】:
这已移至 RTM 中的Microsoft.EntityFrameworkCore
命名空间以上是关于EF 7 中的 db.database.ExecuteSQLCommand 等效项的主要内容,如果未能解决你的问题,请参考以下文章