【问题标题】:Does Entity Framework handle transaction by default on ExecuteFunction while calling transactions?实体框架在调用事务时是否默认在 ExecuteFunction 上处理事务?
【发布时间】:2016-01-04 20:41:28
【问题描述】:
ObjectContext.ExecuteFunction<GetStoredProcedure_Result>("StoredProcedure", parameter);

此代码是否自动覆盖事务(通过实体框架)?或者我也应该在存储过程中添加事务?

请提供任何链接。

【问题讨论】:

    标签: c# entity-framework transactions


    【解决方案1】:

    在 EF6 中,每个存储过程调用都包装在 Transaction 中。但对于早期版本的 EF,它不会自动覆盖。您需要指定TransactionScope 如下...

    using (TransactionScope transaction = new TransactionScope())
    {
       //your code here
    }
    

    有关交易的更多信息,请关注MSDN

    我认为 linklink 可以帮助您解决问题。

    【讨论】:

    • 再一次,如果你真的想拥有跨国数据库逻辑,那么总是建议在你的过程代码逻辑中的数据库端实现相同的,而不是在 ADO.NET 或应用程序代码中。
    • 但是根据这个链接它说相反(据我了解)msdn.microsoft.com/en-us/data/dn456843.aspx想要确定。
    • 你应该考虑isolationlevel (msdn.microsoft.com/en-us/library/…)。
    • EF 隐式支持事务。如果您正在执行 SaveChanges,EF 会将命令隐式包装在数据库事务中,例如 SqlTransaction。默认情况下,EF 使用 DbTransaction 来处理 db conn 的单个实例上的操作。 EF还支持跨骑,所以我猜你的情况是吉普赛人建议你需要使用TransactionScope()。
    • 那么在我的代码中调用ExecuteFunction的时候,如果Stored Procedure的执行发生错误,是不是不回滚?我需要在 C# 中实现 transactionScope 或在 SQL 中实现 Transaction 来实现这一点?这是答案中实现的吗?
    猜你喜欢
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多