自从我阅读了Code-First以来,我发现可能存在问题(尽管只是预览),而EF4 CTP5版本存在以下两个问题:
正如它所说的“New Change Tracking API”
但是我没有追踪变化
猜测。与LINQ to SQL I相比
举个例子看看
每种方法反应:
LINQ to SQL:
Dim db2 As New LINQDataContext
Dim db3 As New LINQDataContext
db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1"
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2"
db2.SubmitChanges()
db3.SubmitChanges()
EF 4 CTP5:
Dim db2 As New ProductContext
Dim db3 As New ProductContext
db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1"
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2"
db2.SaveChanges()
db3.SaveChanges()
这些代码仅在上下文方面有所不同。在LINQ to SQL中,第二个SubmitChanges将引发“未找到或更改行”的异常。 ,但是在EF中它将忽略更改并继续更改行两次,我认为这很不好,因为我们必须考虑并发,对吗?
最佳答案
着眼于您的第一个比较,我相信您默认在LINQ to SQL中进行了一些乐观的并发检查。在EF中,您必须显式标记要检查并发性的所有属性。由于您很可能没有对Name属性执行此操作,因此EF不在乎有人在另一个数据库命令中更改了产品名称。
我还想指出,这不是特定于代码的行为,而是整个EF中的行为。如果创建实体数据模型,则还必须明确标记属性以进行并发检查。
如果使用的是流畅的API,请查找IsConcurrencyToken作为要在属性上设置的属性。如果使用批注,请查看ConcurrencyCheckAttribute。
hth
朱丽叶
关于linq - Entity Framework 4(CTP 5)并发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4674842/