C# 实体框架4中的TransactionScope是否在不跨多个上下文对象的情况下使用?
我正在进行我的第一个使用EF4的大型项目,并且在实现某些业务场景时一直在考虑并发情况。我知道EF通过将并发模式设置为固定实体属性,内置了对乐观并发的支持。在大多数情况下,这似乎是足够的。我想知道的几件事: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
TransactionScope
?嗯,也许您需要在一个事务过程中获得服务器生成的密钥(想想SCOPE\u IDENTITY
)。通常,当您有多个对SaveChanges()
的调用时,这些调用必须作为一个组成功或失败
如果不使用多个上下文,为什么要使用
TransactionScope
?嗯,也许您需要在一个事务过程中获得服务器生成的密钥(想想SCOPE\u IDENTITY
)。一般来说,当您对SaveChanges()
有多个调用时,这些调用必须作为一个组成功或失败。我想我必须找到一个很好的例子来说明为什么我希望在一个上下文/事务中多次调用SaveChanges()。我想它在有状态环境中可能更常见,而ASP.NET实际上主要是请求范围。我不确定我是否理解你的观点。在某些地方,悲观并发有它的位置。我想知道EF4是否有可能。或者我应该接受你的观点吗?#1没有,就像你说的那样,监视约束冲突是唯一的出路?#3可以使用TransactionScope
。但它实际上并不能解决你的问题,因为#1.明白。因此,确认TransactionScope实际上将开始锁定行/表,但仅锁定修改的行(悲观并发)。因此,从初始验证到插入,它对我来说没有任何作用。我想我必须找到一个好的例子来说明为什么我希望在一个上下文/事务中多次调用SaveChanges()。我想它在有状态环境中可能更常见,而ASP.NET实际上主要是请求范围。我不确定我是否理解你的观点。在某些地方,悲观并发有它的位置。我想知道EF4是否有可能。或者我应该接受你的观点吗?#1没有,就像你说的那样,监视约束冲突是唯一的出路?#3可以使用TransactionScope
。但它实际上并不能解决你的问题,因为#1.明白。因此,确认TransactionScope实际上将开始锁定行/表,但仅锁定修改的行(悲观并发)。因此,从初始验证到插入,它对我来说没有任何作用。