【问题标题】:Entity Framework: Is the completely transaction complete after SaveData?实体框架:SaveData 之后事务是否完整?
【发布时间】:2018-02-13 18:46:45
【问题描述】:

在 MVC5、EntityFramework6 网络应用程序上工作。通常在我的类中,我在类范围内定义我的上下文变量...

[Authorize]
public class MyResultsController : Controller
{
    private readonly XYZ_MyContext db = new XYZ_MyContext();

然后,只要我想访问上下文,我就只引用“db”。

在我保存数据的方法中,我这样做...

this.db.SaveChanges();

我通常不使用 Using 语句。

我的问题是……

(1) 在调用 SaveChanges 时,如果它没有出错,那么事务就完成了,对吧?您不必明确结束它吗? (数据暂不缓存,等等……)

(2) 另外,如果我看到数据库中的实际数据,交易是否 100% 完成?换句话说,如果我可以看到数据表中的数据(通过 SSMS),除非被明确删除,否则数据不会只是“消失”,对吧?

谢谢!

【问题讨论】:

    标签: sql-server asp.net-mvc entity-framework-6


    【解决方案1】:

    是的。如果您调用SaveChanges() 的行完成且未引发异常,则事务将完成。

    在所有版本的 Entity Framework 中,每当您执行 SaveChanges() 以在数据库上插入、更新或删除时,框架都会将该操作包装在事务中。这个事务只持续足够长的时间来执行操作然后完成。当您执行另一个此类操作时,将启动一个新事务。

    MSDN documentation

    另外,如果我看到数据库中的实际数据,交易是否 100% 完成?

    如果您在事务中执行 INSERT,然后从要插入的同一个表中执行 SELECT,那么您将不会看到任何结果您的插入直到事务完成,除非您在 SELECT 查询中包含 WITH (NOLOCK) 提示。

    如果您执行SELECT 并且确实包含WITH (NOLOCK) 提示,则可能会出现“脏读”,您可能会看到在事务期间插入到表中的表中的行,但是如果事务失败,可能随后会被回滚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2017-01-06
      • 2011-03-17
      相关资源
      最近更新 更多