Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架4中的TransactionScope是否在不跨多个上下文对象的情况下使用?_C#_Asp.net_Sql_Entity Framework_Entity Framework 4 - Fatal编程技术网

C# 实体框架4中的TransactionScope是否在不跨多个上下文对象的情况下使用?

C# 实体框架4中的TransactionScope是否在不跨多个上下文对象的情况下使用?,c#,asp.net,sql,entity-framework,entity-framework-4,C#,Asp.net,Sql,Entity Framework,Entity Framework 4,我正在进行我的第一个使用EF4的大型项目,并且在实现某些业务场景时一直在考虑并发情况。我知道EF通过将并发模式设置为固定实体属性,内置了对乐观并发的支持。在大多数情况下,这似乎是足够的。我想知道的几件事: 在这种情况下,我首先验证一个实体不存在,然后插入该实体。从技术上讲,可能有人在我的验证和插入之间的瞬间插入了该实体。使用EF处理这种情况的最佳实践是什么?当然,我在考虑两种可能的解决方案,悲观并发或处理将发生的唯一约束异常 我试图记住,在SQL中发出Begin Transaction/Comm

我正在进行我的第一个使用EF4的大型项目,并且在实现某些业务场景时一直在考虑并发情况。我知道EF通过将并发模式设置为固定实体属性,内置了对乐观并发的支持。在大多数情况下,这似乎是足够的。我想知道的几件事:

  • 在这种情况下,我首先验证一个实体不存在,然后插入该实体。从技术上讲,可能有人在我的验证和插入之间的瞬间插入了该实体。使用EF处理这种情况的最佳实践是什么?当然,我在考虑两种可能的解决方案,悲观并发或处理将发生的唯一约束异常

  • 我试图记住,在SQL中发出Begin Transaction/Commit Transaction块是否会自动锁定所涉及的表,这意味着它将强制执行上面提到的悲观场景。如果是,在TransactionScope中包装这两个EF操作是否会获得类似的结果

  • 如果TransactionScope不会强制执行悲观并发,那么什么会强制执行呢

  • DB约束是唯一可靠的解决方案,因为它是唯一可以看到其他编写器未提交事务的解决方案
  • 不要假定SQL Server正在锁定表。它可能正在锁定行
  • 挥之不去的、未承诺的写作。这对于任何数据访问技术来说都是一个坏主意。改用约束 如果不使用多个上下文,为什么要使用
    TransactionScope
    ?嗯,也许您需要在一个事务过程中获得服务器生成的密钥(想想
    SCOPE\u IDENTITY
    )。通常,当您有多个对
    SaveChanges()
    的调用时,这些调用必须作为一个组成功或失败

  • DB约束是唯一可靠的解决方案,因为它是唯一可以看到其他编写器未提交事务的解决方案
  • 不要假定SQL Server正在锁定表。它可能正在锁定行
  • 挥之不去的、未承诺的写作。这对于任何数据访问技术来说都是一个坏主意。改用约束
    如果不使用多个上下文,为什么要使用
    TransactionScope
    ?嗯,也许您需要在一个事务过程中获得服务器生成的密钥(想想
    SCOPE\u IDENTITY
    )。一般来说,当您对
    SaveChanges()
    有多个调用时,这些调用必须作为一个组成功或失败。

    我想我必须找到一个很好的例子来说明为什么我希望在一个上下文/事务中多次调用SaveChanges()。我想它在有状态环境中可能更常见,而ASP.NET实际上主要是请求范围。我不确定我是否理解你的观点。在某些地方,悲观并发有它的位置。我想知道EF4是否有可能。或者我应该接受你的观点吗?#1没有,就像你说的那样,监视约束冲突是唯一的出路?#3可以使用
    TransactionScope
    。但它实际上并不能解决你的问题,因为#1.明白。因此,确认TransactionScope实际上将开始锁定行/表,但仅锁定修改的行(悲观并发)。因此,从初始验证到插入,它对我来说没有任何作用。我想我必须找到一个好的例子来说明为什么我希望在一个上下文/事务中多次调用SaveChanges()。我想它在有状态环境中可能更常见,而ASP.NET实际上主要是请求范围。我不确定我是否理解你的观点。在某些地方,悲观并发有它的位置。我想知道EF4是否有可能。或者我应该接受你的观点吗?#1没有,就像你说的那样,监视约束冲突是唯一的出路?#3可以使用
    TransactionScope
    。但它实际上并不能解决你的问题,因为#1.明白。因此,确认TransactionScope实际上将开始锁定行/表,但仅锁定修改的行(悲观并发)。因此,从初始验证到插入,它对我来说没有任何作用。