【问题标题】:EF Code First DBContext and TransactionsEF Code First DBContext 和事务
【发布时间】:2011-08-27 02:00:00
【问题描述】:

我想知道用DBContext 实现交易的最佳方式是什么。特别是,

  1. 如果我更改多个实体,DbContext.SaveChanges 是否在内部实现事务?
  2. 如果我想多次调用DbContext.SaveChanges(相同的contxet/不同的contxets),如何实现交易?

【问题讨论】:

    标签: entity-framework transactions entity-framework-4.1 dbcontext


    【解决方案1】:
    1. 是的。 SaveChanges 在内部使用事务。
    2. 使用TransactionScope 包装对SaveChanges 的多个调用

    例子:

    using(var scope = new TransactionScope(TransactionScopeOption.Required,
        new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
    {
        // Do something 
        context.SaveChanges();
        // Do something else
        context.SaveChanges();
    
        scope.Complete();
    }
    

    【讨论】:

    • 确保使用 Sql 2008 或更高版本作为数据库(或在客户端上运行 MSDTC 服务)。以前的版本会将事务升级为第二个SaveChanges 上的分布式事务。这是由于DbContext 在内部如何处理其连接的打开和关闭。
    • 是否可以从第一次保存更改中获取身份?我总是看到 Id = 0。
    • @JarrettV - 我认为您的问题是由于 IsolationLevel 设置。降低它可能会有所帮助...
    • 这不适用于 EF 4.3.1。在调用 context.SaveChanges() 之前,我们必须显式打开 Objectcontext 上的连接。
    • @renegadeMind:这当然适用于 DbContext。您所描述的是当您想要避免分布式事务时使用的高级方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2011-10-26
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多