我有一个使用SQL Compact 4.0和实体框架的简单控制台应用程序4.数据库有一个名为Section
的表,它有三列:Id
(StoreGeneratedPattern:Identity,Type: Int32),Title
(类型:字符串)和TimeStamp
(StoreGeneratedPattern:Computed,ConcurrencyMode:Fixed,Type:Binary,MaxLength: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中的错误还是我错过了什么?
谢谢,
的Darren
答案 0 :(得分:0)
也许: context.Refresh(System.Data.Objects.RefreshMode.ClientWins,section); 在第一次SaveChanges之后
答案 1 :(得分:0)
我发现了问题。事实证明,这是edmx设计器中的一个错误,其中StoreGeneratedPattern的属性未写入底层xml文件。它仅保存在CSDL部分中,但不保存在SSDL部分中请参阅http://www.ladislavmrnka.com/2011/03/the-bug-in-storegeneratedpattern-fixed-in-vs-2010-sp1/请注意,在该博客中他说它已在VS2010 SP1中修复,我有那个版本,并且它没有在我的版本中修复!
手动输入xml文件修复了问题。不幸的是,随后的变化再次清除它。
的Darren
答案 2 :(得分:-1)
听起来像EF中不支持的功能与SQL CE结合使用。也许这会提供更多见解:
EF / SQL CE / Auto-generated primary keys
但是this一个人说了一切:
词汇, 您正在讨论的4.1.1已知问题仅在您尝试对具有Identity或Rowversion列的表执行DML操作时才会出现问题。就选择语句而言,没有问题,一切都应该有效。如果您需要在应用程序中针对SQLCE使用DML语句,则不应在模式中使用Identity和Rowerversion列。休息一切都会正常工作,Entity Framework将为您添加数据。如果您在此之后仍然遇到任何问题,请告诉我,我将很乐意为您提供帮助。关心Ravi Tandon。
这是对帖子评论的某个地方。 DML代表数据操作语言(读取:插入/更新/删除)。