实体框架:Savedata之后是完全交易的



在MVC5,EntityFramework6 Web应用程序上工作。通常在我的课程中,我在类范围中定义上下文var ...

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

然后,每当我想访问上下文时,我只是引用" db"。

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

this.db.SaveChanges();

我通常不使用使用语句。

我的问题是....

(1(在您调用savechanges的点,如果没有错误,则交易完成了吗?您不必明确结束它吗?(数据不是临时缓存等...(

(2(还,如果我在数据库中看到实际数据,交易肯定是100%完成吗?换句话说,如果我可以在数据表中看到数据(通过SSMS(,则数据将不仅仅"消失",除非明确删除,对吗?

谢谢!

是。如果您称为SaveChanges()的行完成而不抛出例外的行,则交易将完成。

在实体框架的所有版本中,每当您执行SaveChanges()以插入,更新或删除数据库时,框架都会在事务中包装该操作。此交易仅持续足够长的时间来执行操作然后完成。当您执行另一个此类操作时,开始了新的交易。

请参阅MSDN文档

另外,如果我在数据库中看到实际数据,交易肯定是100%完成吗?

如果您正在执行交易中包裹的INSERT,然后您随后从同一表中进行SELECT,那么您将 not 请参阅插入的任何结果,直到交易完成,除非您在SELECT查询中包括WITH (NOLOCK)提示。

如果您执行SELECT,并且确实包括WITH (NOLOCK)提示,那么可以获得"肮脏的读取",在交易过程中,您可能会在桌子中看到桌子上的行,但随后可能是如果交易失败,则会回滚。

相关内容

最新更新