EF 4.1.3为并发实现Rowversion不起作用

时间:2016-02-11 12:04:08

标签: entity-framework concurrency ef-code-first rowversion entity-framework-4.3.1

我有一个BaseEntity类,其中包含一个名为stamp,id和state的字节数组,每个Entity继承自我将映射映射到

 Property(t => t.Stamp).IsRequired().IsRowVersion();

这是在BaseEntityConfiguration中设置的 这是这样设置的

 public BaseEntityConfiguration<T> : EntityTypeConfiguration<T> where T :B aseEntity

映射就像这样完成

var baseMapConfiguration = new BaseEntityConfiguration<EntityA>();
           modelBuilder.Configurations.Add(baseMapConfiguration);
           var entityAMap = new EntityAMap(baseMapConfiguration);

数据库有Stamp ROWVERSION NOT NULL;在表EntityA上 我有处理DbUpdateConcurrencyException的代码,但即使邮票不同,也不会被捕获 还有没有关于Stamp字段的where子句,我期望

    SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[LastModified] AS [LastModified], 
[Extent1].[CreatedDate] AS [CreatedDate], 
[Extent1].[Stamp] AS [Stamp]
FROM [dbo].[EntityA] AS [Extent1]

正如你所看到的那样,我没有用普通的映射设置尝试它,但仍然得到相同的结果

**我发现问题是EF获取最新的Rowversion而不是传入的一个,我怎么能阻止它。 **

1 个答案:

答案 0 :(得分:0)

if (!EntityA.Stamp.Equals(orignal.Stamp))
{
     ctx.Entry(orignal).OriginalValues["Stamp"] = xmlFile.Stamp;
}

我在DAL中缺少这些代码行,这是停止EF将当前标记作为搜索条件。