C# 带有SQL Compact 4的EF4,行版本不';保存时不更新

C# 带有SQL Compact 4的EF4,行版本不';保存时不更新,c#,entity-framework-4,timestamp,sql-server-ce,rowversion,C#,Entity Framework 4,Timestamp,Sql Server Ce,Rowversion,我有一个使用SQL Compact 4.0和entity Framework 4的简单控制台应用程序。数据库有一个名为节的表,它有三列:Id(StoreGeneratedPattern:Identity,Type:Int32)、Title(Type:string)和TimeStamp(StoreGeneratedPattern:Computed,concurrenceymode:Fixed,Type:Binary,MaxLength:8)。时间戳列实际上是SQL Compact中的一种rowve

我有一个使用SQL Compact 4.0和entity Framework 4的简单控制台应用程序。数据库有一个名为
节的表,它有三列:
Id
(StoreGeneratedPattern:Identity,Type:Int32)、
Title
(Type:string)和
TimeStamp
(StoreGeneratedPattern:Computed,concurrenceymode:Fixed,Type:Binary,MaxLength:8)。时间戳列实际上是SQL Compact中的一种rowversion类型

我的主要代码如下:

Section section = new Section();
section.Title = "Hello";

using (Entities1 context = new Entities1())
{
    context.Sections.AddObject(section);                
    context.SaveChanges();

    section.Title = "Changed";
    context.SaveChanges();
}
此代码引发并发异常,因为在第一个SaveChanges()方法之后,时间戳列没有从数据库中更新。注意,它在SQLServer2008中运行良好

这是Compact中的错误还是我遗漏了什么

谢谢

达伦

也许: context.Refresh(System.Data.Objects.RefreshMode.ClientWins,第节);
第一次保存后,更改听起来像是EF中与SQL CE结合使用的不受支持的功能。也许这会给你更多的洞察力:

但有一种说法是:

莱克西斯, 仅当您尝试对具有Identity或Rowversion列的表执行DML操作时,您所讨论的4.1.1已知问题才会导致问题。就Select语句而言,没有问题,一切都应该正常。若您需要在应用程序中针对SQLCE使用DML语句,那个么模式中不应该有Identity和RowServerVersion列。Rest一切正常,实体框架将为您添加数据。如果在此之后您仍然面临任何问题,请让我知道,我将很乐意提供帮助。问候拉维·坦顿


在帖子评论下面的某个地方。其中DML代表数据操作语言(读:插入/更新/删除)。

我发现了问题。事实证明,这是edmx设计器中的一个错误,其中StoreGeneratedPattern的属性未写入基础xml文件。它只保存在CSDL部分,而不保存在SSDL部分。请注意,在那个博客中,他说它在VS2010 SP1中是固定的,我有那个版本,但在我的版本中没有固定

手动将其输入xml文件修复了该问题。不幸的是,随后的更改再次清除了它


Darren

自动生成的密钥问题是一个3.5版本的问题,它已在4.0版本中修复