Sql ACID并发隔离级别与ROWVERSION
我正在sql server 2012上测试并发性,并使用实体框架 我注意到并发主要可以通过以下方式之一进行控制:Sql ACID并发隔离级别与ROWVERSION,sql,entity-framework,concurrency,sql-server-2012,acid,Sql,Entity Framework,Concurrency,Sql Server 2012,Acid,我正在sql server 2012上测试并发性,并使用实体框架 我注意到并发主要可以通过以下方式之一进行控制: 设置事务隔离级别[可重复读取|可序列化|…] 在表上创建ROWVERSION列 据我所知,第一种方法使用数据库日志和锁,而第二种方法使用Rowversion值的基本比较 如果我说的是错的,请纠正我 最好的选择是什么?我应该同时使用它们还是只使用一个?通常,每个dbcontextsaveChanges()都是。我们讨论的是在不同级别上处理并发:在saveChanges上处理数据库事务,
最好的选择是什么?我应该同时使用它们还是只使用一个?通常,每个dbcontext
saveChanges()
都是。我们讨论的是在不同级别上处理并发:在saveChanges上处理数据库事务,以及在几个dbcontext saveChanges之间处理并发:
- 数据库层:数据库能够处理实时事务的隔离。您可以使用
命令更改隔离级别设置事务隔离级别
- 实体框架层:EF能够保持从一个事务到另一个事务的并发性,只是为了知道其他用户是否更改了您的数据。它们有两种方式:
- 将实体框架配置为在Update和Delete命令的Where子句中包含表中每列的原始值。 与第一个选项一样,如果行中的任何内容在第一次读取行后发生了更改,Where子句将不会返回要更新的行,实体框架将其解释为并发冲突。对于具有许多列的数据库表,这种方法可能导致非常大的Where子句,并且可能需要维护大量的状态
- 在数据库表中,包括一个跟踪列,该列可用于确定行的更改时间。然后,您可以将实体框架配置为将该列包含在SQL Update或Delete命令的Where子句中。跟踪列的数据类型通常为rowversion
db.Entry(departmentToUpdate).OriginalValues["RowVersion"] = rowVersion;
引号和详细信息:通常,每个dbcontext
saveChanges()
都是。我们讨论的是在不同级别上处理并发:在saveChanges上处理数据库事务,以及在几个dbcontext saveChanges之间处理并发:
- 数据库层:数据库能够处理实时事务的隔离。您可以使用
命令更改隔离级别设置事务隔离级别
- 实体框架层:EF能够保持从一个事务到另一个事务的并发性,只是为了知道其他用户是否更改了您的数据。它们有两种方式:
- 将实体框架配置为在Update和Delete命令的Where子句中包含表中每列的原始值。 与第一个选项一样,如果行中的任何内容在第一次读取行后发生了更改,Where子句将不会返回要更新的行,实体框架将其解释为并发冲突。对于具有许多列的数据库表,这种方法可能导致非常大的Where子句,并且可能需要维护大量的状态
- 在数据库表中,包括一个跟踪列,该列可用于确定行的更改时间。然后,您可以将实体框架配置为将该列包含在SQL Update或Delete命令的Where子句中。跟踪列的数据类型通常为rowversion
db.Entry(departmentToUpdate).OriginalValues["RowVersion"] = rowVersion;
引用和详细信息:SQL Server通过遵守ACID属性来维护数据完整性和系统稳定性,ACID属性是原子性、一致性、隔离性和持久性的缩写 此首字母缩写词的隔离部分表示,所有事务都是彼此隔离运行的,没有两个资源可以同时更新SQL对象的相同数据或定义。在悲观隔离级别(readuncommitted、readcommitted、Repeatable和Serialize-able)中,这是由锁定控制的。在乐观隔离级别(读提交快照和快照)中,这由行版本控制控制
摘自SQL Server通过坚持ACID属性来维护数据完整性和系统稳定性,ACID属性是原子性、一致性、隔离性和持久性的缩写 此首字母缩写词的隔离部分表示,所有事务都是彼此隔离运行的,没有两个资源可以同时更新SQL对象的相同数据或定义。在悲观隔离级别(readuncommitted、readcommitted、Repeatable和Serialize-able)中,这是由锁定控制的。在乐观隔离级别(读提交快照和快照)中,这由行版本控制控制
摘自我有同样的问题。。。我希望有人能给出更清楚的答案。对@danihp没有不敬,但他们的答案我不清楚。我有同样的问题。。。我希望有人能给出更清楚的答案。没有对@danihp的不敬,但我不清楚他们的答案。