我正在使用 Entity Framework 4 编写数据库优先应用程序。我想使用一timestamp
列来检查并发性。所以我在我的表中创建了一个名为ts
数据timestamp
类型的列。
在 Visual Studio 2010 中,我从.edmx
文件中的数据库更新了模型。Store Generated Pattern
然后我将并发模式更改为“固定”和Computed
. 在应用程序中,所有记录都列在列表视图中,我可以选择其中任何一个并从列表视图中编辑它们。
当我想在列表视图中显示所有记录时,我执行了以下操作:
ListViewItem item = new ListViewItem(cableApplication.Id.ToString());
item.SubItems.Add(cableApplication.Application);
item.SubItems.Add(cableApplication.DefaultSize.ToString());
item.SubItems.Add(ASCIIEncoding.ASCII.GetString(cableApplication.ts));
lv1.Items.Add(item);
现在,当我在监视窗口中跟踪ts
变量的值时,我看到byte[8] :0,0,0,0,0,0,18,178
假设我想编辑记录我创建实体的一个新实例并将其传递给如下形式
CableApplication cableApplication = new CableApplication(id,lv1.FocusedItem.SubItems[1].Text,lv1.FocusedItem.SubItems[2].Text,Encoding.ASCII.GetBytes(lv1.FocusedItem.SubItems[3].Text),State.Modified);
FormCableApplication formCableApplication = new FormCableApplication(cableApplication);
if (formCableApplication.ShowDialog() == DialogResult.OK)
{
if (SaveObject(cableApplication, "CableApplications"))
{
//// Something here
}
}
如果这是我第一次想编辑记录,我的值是
byte[8] :0,0,0,0,0,0,18,178 (or whatever is in above)
对于Encoding.ASCII.GetBytes(lv1.FocusedItem.SubItems[4].Text)
in watch 窗口,但如果这是我第二次或以上编辑记录,我会得到 in watch 窗口的值0,0,0,0,0,0,18,63
(始终是这个值)Encoding.ASCII.GetBytes(lv1.FocusedItem.SubItems[4].Text)
。
所以我得到这个错误
存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。
为什么会这样?为什么第二次更改了值而没有发生任何事情(没有编辑,或者没有别的)?我一个人开发这个程序,所以肯定没有人更改或删除数据?
我timestamp
在实体框架中对此完全感到困惑。
任何帮助表示赞赏。