【问题标题】:How to execute system stored procedure with entity framework如何使用实体框架执行系统存储过程
【发布时间】:2014-02-25 12:02:11
【问题描述】:

我从 EF 调用一个存储过程,它本身执行一个系统存储过程。

public virtual int MyFunctionImport()
{
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("MyFunction"); //calls a sql server system procedure
}

现在我收到一个错误,因为 EF 围绕函数执行包装了事务:

该过程不能在事务中执行。

可以做些什么来解决这个问题?

【问题讨论】:

  • 如果您已经在 EF 中导入了存储过程,并对其进行了函数映射,则无需使用 ExecuteFunction 执行它 - 您可以像这样使用它:return this.ObjectContext.up_MyStoredProcedure(someparameter) ...以这种方式执行时仍然会导致相同的错误吗?
  • 我无法构建命令,出现错误:“dbContext 不包含 ObjectContext 的定义”

标签: sql-server entity-framework stored-procedures transactions system


【解决方案1】:

似乎无法关闭事务,因为这是 EF 的默认行为。

TransactionScope(TransactionScopeOptions.Suppress)

没有帮助。

我使用bcp service将系统存储过程“外包”到自己的存储过程中。

select @cmd = 'bcp "EXEC [//insert db name here].[sys].[//insert system procedure name here]" queryout "//insert folder name here"';                
EXEC xp_cmdshell @cmd;

感谢您提供更简单的解决方案。

【讨论】:

    猜你喜欢
    • 2013-10-31
    • 2016-12-28
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多