问题标签 [optimistic-concurrency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - ADO.NET Entity Framework 中的乐观并发
我找到了一篇 MSDN 文章,描述了 EF 在保存更改时如何处理并发:
默认情况下 [...] 对象服务将对象更改保存到数据库而不检查并发性。对于可能遇到高度并发的属性,我们建议在概念层中定义实体属性,其属性为 ConcurrencyMode="fixed"
我有两个问题:
在我的模型中没有属性 where
ConcurrencyMode="fixed"
,我可以安全地假设如果OptimisticConcurrencyException
在保存更改时抛出 an ,那是因为实体不再存在于数据存储中,即它已被另一个用户删除,或者我是遗漏了什么?我想 EF 执行一个
UPDATE
看起来像这样的 -statement,在我看来,OptimisticConcurrencyException
如果 ID = 1 的 Person 不存在,只会导致抛出:使用 时
ConcurrencyMode="fixed"
,EF 在删除实体时是否也会检查并发性?换句话说,EF 是否会执行如下所示的DELETE
- 语句(不仅仅是 - 子句中的主键WHERE
):
.net - 使用 Linq to Sql 对象进行更新时遇到问题
我有一个简单的 linq to sql 对象。我从数据库中获取它并更改一个字段然后保存。
没有行已更新。:(
当我检查通过网络发送的完整 Sql 代码时,我注意到它对行进行了更新,不是通过主键而是通过 where 子句对所有字段进行更新。这是正常的吗?我原以为使用连接主键的 where 子句来更新字段会很容易,而不是在每个字段上使用 where'ing(是一个单词:P)。
这是代码...
这是一些示例sql ..
现在,我知道此更新中有一个日期时间字段..当我检查数据库时,它的值是/是'2009-09-25 12:32:12.720'(比上面少零)..所以我不是确定这是否弄乱了 where 子句条件......
但还是!它是否应该在PK的..如果有的话..为了速度做一个where子句!
是/否?
更新
在阅读了 nitzmahone 的回复后,我尝试在某些值上使用乐观并发,但它仍然没有工作:(
所以我开始了一些新的东西......随着乐观并发的发生,它在它试图更新的字段上包含了一个 where 子句。发生这种情况时,它不起作用。
所以..在上面的sql中,where子句看起来像这样......
这听起来不太对!在我进行更新之前,数据库中的值为空。但是当我将 ListId 值添加到 where 子句时(或者更重要的是,当 L2S 添加它时,由于 optomistic concurrecy),它无法找到/匹配该行。
什么?
nhibernate - NHibernate 不抛出 StaleObjectStateException 时数据库中已使用和数据已更改
我使用 SQL 时间戳列作为版本号在 NHibernate 中映射了一个具有乐观并发控制的实体。映射如下:
我正在测试当数据库中的一行中的数据在获取和更新记录之间发生变化时会发生什么。为此,我直接针对表中正在由 NHibernate 更新的记录之一运行更新语句。此直接更新会更改表中记录的版本号。
正如预期的那样,NHibernate 托管更新不会发生在特定行上(这很好)。但是,在提交期间不会引发异常。我希望在提交事务时会发生 StaleObjectStateException,以便我可以回滚事务并通知用户。这不是预期的行为吗?我错过了什么吗?
我提交事务的代码如下所示:
这些项目属于同一个会话,所有工作都在一个事务中完成。ChildEntity 是 Entity 基类的子类,它的乐观锁设置为版本。
java - Hibernate - 查询中的 StaleObjectStateException 可能吗?
StaleObjectStateException
如果该查询的结果数据被第一个和第二个查询之间的不同会话中的并发更新更改,那么当您在一个 tx 中执行相同的查询两次时,是否可以通过 Hibernate 获得一个?
在这种情况下,我对所有实体使用乐观并发控制。
所以它看起来像这样。
线程 1:事务开始
线程 1:查询被执行并检索,即键 = 4711 的顺序
线程 2:与键 4711 相同的顺序在第二个线程中被检索、更改和提交
线程 1:查询再次执行并应返回使用键 = 4711 订购
我会StaleObjectStateException
在第二个查询中获得 Thread-1 吗?
谢谢你的帮助!
托马斯
insert - 使用 linq-to-entities 插入
嗨,我无法解决此错误。任何有关该问题的帮助将不胜感激,谢谢!
错误信息:
存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。
每当我尝试添加笔记本电脑/台式机时,都会收到上述错误消息。
在本地运行时一切正常,但在开发时却不行。网站和服务/数据库位于两个不同的开发箱上。
这是堆栈跟踪:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
此外,在尝试添加笔记本电脑/台式机时,有时会插入计算机行,但不会插入笔记本电脑/台式机行。
c# - NHibernate(c#)示例中的并发冲突
有一段时间,我一直在阅读 NHibernate 中的乐观并发。如果我的理解是正确的,那么下面的示例应该很好。
考虑两个事务 T1 和 T2。
- 当 T1 和 T2 同时完成时,状态(DB 条目)将使用最新更新的值进行更新。(T1 或 T2)。
虽然它在概念上似乎是合理的,但为了理解和集成测试,我该如何模拟它。?
有人可以帮我提供一个示例 C# 代码吗?
谢谢 ,
维杰
gridview - 通过 ObjectDataSource 和 GridView 的乐观并发问题
我在 ASP .NET 2.0 应用程序中遇到问题。
我有一个 GridView 显示来自 ObjectDataSource 的数据(连接到连接到 TabledAdapter 的 BLL 类(使用乐观并发的类型化数据集)。
选择(显示数据)工作得很好,但是,当我更新一行时,GridView 确实将旧值传递给 ObjectDataSource。
这是页面的一部分:
我有一种感觉,其中涉及巨大的失败或其他什么,但我已经盯着它看了好几个小时,我就是找不到。
.net-4.0 - 我应该如何处理这个实体框架代码中的这个乐观并发错误,我有?
我在一些使用EF4的存储库模式项目中有以下伪代码。
很简单,但我遇到了运行时错误:-
ConcurrencyException:存储、更新、插入或删除语句影响了意外的行数 (0)。
现在,这就是正在发生的事情:-
- EF4 的两个实例同时在应用程序中运行。
- 实例 A 调用删除。
- 实例 B 在一纳秒后调用 delete。
- 实例 A 加载实体。
- 实例 B 还加载实体。
- 实例 A 现在删除了该实体 - 酷香蕉。
- 实例 B 尝试删除实体,但它已经消失了。因此,当它期望 1 .. 或类似的东西时,无计数或什么不是 0。基本上,它发现它应该删除的项目没有删除(因为它发生在几秒钟前)。
我不确定这是否像比赛条件或其他东西。
无论如何,我可以在这里做些什么让第二次通话不会崩溃?我可以把它变成一个存储过程..但我希望现在避免这种情况。
有任何想法吗?我想知道是否可以在调用 select 时锁定该行(并且仅该行)......强制实例 B 等待行锁被释放。到那时,该行已被删除,因此当实例 B 选择时,数据不存在.. 所以它永远不会删除。
java - onetomany 集合持有者的版本控制失败
给定的父实体
和孩子一
在一个事务中同时更新父级和子级时,会抛出 org.hibernate.StaleObjectStateException:行已被另一事务更新或删除(或未保存值映射不正确):
实际上,hibernate 发布了两个 sql 更新:一个更改父属性,另一个更改子属性。你知道摆脱父母更新改变孩子的方法吗?更新导致乐观锁效率低下和误报。请注意,孩子和父母都正确地将他们的状态保存在数据库中。
Hibernate 版本是 3.5.1-Final
sql-server - 如何计算 Sql Server 中的读/写比率?
如何查询 Sql Server 2005 中的读/写比率?有什么我应该注意的警告吗?
也许它可以在 DMV 查询、标准报告、自定义报告(即性能仪表板)或检查 Sql Profiler 跟踪中找到。我不确定。
我为什么在乎?
我正在花时间提高我的网络应用数据层的性能。它处理数百万条记录和数以千计的用户。
我正在研究的要点之一是数据库并发性。默认情况下,Sql Server 使用悲观并发——适合写入繁重的应用程序。如果我的应用程序读取量很大,我可能会将其切换为乐观并发(隔离级别:),read committed snapshot
就像Jeff Atwood 对 StackOverflow 所做的那样。