EF4 与 SQL Compact 4,rowversion 在保存时不更新

Posted

技术标签:

【中文标题】EF4 与 SQL Compact 4,rowversion 在保存时不更新【英文标题】:EF4 with SQL Compact 4, rowversion doesn't update on save 【发布时间】:2011-07-11 18:17:28 【问题描述】:

我有一个使用 SQL Compact 4.0 和实体框架 4 的简单控制台应用程序。数据库有一个名为 Section 的表,其中包含三列:Id (StoreGeneratedPattern: Identity, Type: Int32) em>、Title (类型:字符串)TimeStamp (StoreGeneratedPattern:计算,并发模式:固定,类型:二进制,最大长度:8)。 TimeStamp 列实际上是 SQL Compact 中的 rowversion 类型。

我在 main 中有以下代码:

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

using (Entities1 context = new Entities1())

    context.Sections.AddObject(section);                
    context.SaveChanges();

    section.Title = "Changed";
    context.SaveChanges();

此代码引发并发异常,因为在第一个 SaveChanges() 方法之后未从数据库更新 TimeStamp 列。请注意,它在 SQLServer2008 中运行良好。

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

谢谢,

达伦

【问题讨论】:

【参考方案1】:

也许: context.Refresh(System.Data.Objects.RefreshMode.ClientWins, section); 在第一次 SaveChanges 之后

【讨论】:

【参考方案2】:

我发现了问题。原来这是 edmx 设计器中的一个错误,其中 StoreGeneratedPattern 的属性未写入基础 xml 文件。它仅保存在 CSDL 部分中,但不保存在 SSDL 部分中 请参阅http://www.ladislavmrnka.com/2011/03/the-bug-in-storegeneratedpattern-fixed-in-vs-2010-sp1/ 请注意,在该博客中他说它已在 VS2010 SP1 中修复,我有那个版本,但在我的中没有修复!

手动将其输入到 xml 文件中解决了问题。不幸的是,随后的更改再次清除了它。

达伦

【讨论】:

【参考方案3】:

听起来像是 EF 中不支持的功能与 SQL CE 结合使用。也许这会提供更多的见解:

EF / SQL CE / Auto-generated primary keys

Rowversion column cannot be updated in SQL CE - maybe this conflicts with EF trying to update it when you SaveChanges

但是this 说明了一切:

词汇, 只有当您尝试对具有 Identity 或 Rowversion 列的表执行 DML 操作时,您正在谈论的 4.1.1 已知问题才会导致问题。在选择语句方面没有问题,一切都应该工作。如果您需要在应用程序中针对 SQLCE 使用 DML 语句,则架构中不应包含 Identity 和 Rowerversion 列。休息一切都会正常工作,Entity Framework 将为您添加数据。如果您在此之后仍然遇到任何问题,请告诉我,我很乐意提供帮助。问候 Ravi Tandon。

它位于帖子上的 cmets 下方。 DML 代表数据操作语言(阅读:插入/更新/删除)。

【讨论】:

自动生成的keys问题是3.5的问题,4.0已经修复了

以上是关于EF4 与 SQL Compact 4,rowversion 在保存时不更新的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL Compact/EF4 的 GUID 或 int 实体键?

将 SQL Server Compact 4.0.0.1 与 Entity Framework 4.3 一起使用

无法让 sql server compact 3.5 / 4 与 ASP .NET MVC 2 一起使用

SQL Compact 4.0 和 Entity Framework 4.0:图像/Blob 限制?

在具有标识列的 SQL Server Compact 4.0 表中插入的性能呈指数下降

从 SQL Server Compact 4.0 迁移到 SQL Server Express 后提供程序错误