我使用VS2010生成一个带有两个简单表的SQL Server Compact数据库。
两者都有一列TheID
(int)。在一个我设置唯一的真实而另一个没有。
我在这个专栏上设置了主键。
CREATE TABLE [TestTab] (
[TheID] int NOT NULL
, [TheVal] nvarchar(100) NOT NULL
);
GO
ALTER TABLE [TestTab] ADD CONSTRAINT [PK_TestTab] PRIMARY KEY ([TheID]);
GO
对于另一个(在列上有唯一设置),我得到:
CREATE TABLE [TestTab2] (
[TheID] int NOT NULL
, [TheVal] nvarchar(100) NOT NULL
);
GO
ALTER TABLE [TestTab2] ADD CONSTRAINT [PK_TestTab2] PRIMARY KEY ([TheID]);
GO
CREATE UNIQUE INDEX [UQ__TestTab2__00000000000033E9] ON [TestTab2] ([TheID] ASC);
GO
接下来,我使用SQL Server Compact Toolbox创建一个datacontext。
选择数据工作正常 - 但是当我尝试更新代码时,它会在dc.SubmitChanges()
上断开。
只是我的WP7应用程序结束了。
try / catch没有帮助。
TestTab tT = (from A in dC.TestTabs select A).FirstOrDefault();
if(tT != null) {
tT.TheText += "1";
dC.SubmitChanges();
}
如果我删除唯一索引,代码就可以正常工作。
为什么会发生这种情况?
曼弗雷德
答案 0 :(得分:1)
它是Windows Phone上的LINQ to SQL错误...您的索引是重复的(主键定义也添加索引) - 请参阅我的博客文章:http://erikej.blogspot.com/2012/04/windows-phone-local-database-tip.html。要获取自动生成的值,设置主键是不够的,ypou也必须将列定义为IDENTITY。