2011-02-16 97 views
2

我了解如何使用实体框架为单个表进行乐观并发工作。具有多个表/实体的实体框架并发

但是我想要在多个表中进行乐观并发的场景呢?为了说明我的意思,我会用一个例子:

  • 车表
  • 轮表,外键车(每车多轮)

我怎样才能在案件管理并发该服务器在车上添加/移除车轮。

在Car中添加ModifiedTimestamp列可以处理Car的并发更新,但是如何向Car's Wheel发送?

我只能想象通过使用悲观并发(即 - 将汽车对象锁定到用户)解决此问题。但是从我的研究来看,实体框架并不支持悲观并发。

这只是一个非常简单的例子,我想知道大家如何解决这种情况。我可以想象,在很多情况下,你有一个实体,它具有相关的实体,并且应该在并发更新方面被视为一个实体。

回答

1

一种方法总是在Car表中修改一些东西。汽车是你的车轮的根源,因为没有汽车的车轮不能存在。如果修改车轮,则修改整个集成对象 - 汽车。因此,添加一些汽车更新来模拟这种行为 - 通常是维护一些像ModifiedDate这样的列。

串行化事务支持Pesimistic并发 - 缺省隔离级别为TransactionScope

+0

我在TransactionScope中遇到的问题是我使用Devart连接器与Oracle数据库连接。 TransactionScope由Devart连接器转换为分布式事务,这不是我们想要的。我们想要一个本地事务,因为我们只处理一个数据库。我们还发现了分布式转换的一些主要性能问题。始终更新根目录是一个很好的想法。谢谢! – Mas 2011-02-16 11:14:10

1

支持悲观并发性,只需将所有数据访问权限置于事务范围内即可。

您可以使用的一个简单策略是让最后一个人取得胜利,所有其他更改都会丢失。这并不总是可以接受的。