2012-04-05 22 views
0

我正在創建一個使用SQL Server CE 3.5作爲其數據存儲的基於Entity Framework 4的應用程序。SaveChanges()與SQL Server CE上的System.Data.UpdateException

我使用從實體數據模型創建的.sqlce腳本生成了一個空的.sdf文件。

當我運行這段代碼:

Item item = new Item(); 
item.ID = 1; 
item.Title = "example"; 
item.Value = 37; 

using (ModelContainer context = new ModelContainer()) 
{ 
    context.ItemsSet.AddObject(item); 

    context.SaveChanges(); 
} 

SaveChages()我得到這個System.Data.UpdateException

服務器生成的密鑰和服務器生成的值不被 的SQL Server Compact支持。

this question我知道,實體框架一起使用時,則SQL Server CE 3.5不支持自動生成主鍵。然而,在我的情況下,我明確地設置了我要添加的項目的ID屬性。

是否還有其他問題?

編輯:

這是我.sqlce腳本刪除IDENTITY(1,1)後的內容:

-- Creating table 'ItemsSet' 
CREATE TABLE [ItemsSet] (
    [ID] int NOT NULL, 
    [Title] nvarchar(4000) NOT NULL, 
    [Value] int NULL 
); 
GO 

-- Creating primary key on [ID] in table 'ItemsSet' 
ALTER TABLE [ItemsSet] 
ADD CONSTRAINT [PK_ItemsSet] 
    PRIMARY KEY ([ID]); 
GO 
+0

你在桌子上有什麼ID?它是否設置爲自動生成? – Habib 2012-04-05 18:20:52

回答

1

從代碼中明確設置ID是不會做任何事情,如果你把它設置爲在數據庫中自動增加。您可以使用uniqueidentifier或修改表中的主鍵並刪除自動增量。然後,您可以將代碼中的Id設置爲值。 看看這個帖子Server-generated keys and server-generated values are not supported by SQL Server Compact

+0

嗨,謝謝你的回答!這是我的**。sqlce **內的'CREATE TABLE':CREATE TABLE [ItemsSet]([ID] int IDENTITY(1,1)NOT NULL,...)然後:'AL​​TER TABLE [ItemsSet] ADD CONSTRAINT [PK_ItemsSet] PRIMARY KEY([ID]); GO'你認爲這裏有什麼問題嗎? – Dev 2012-04-05 18:55:23

+1

@Dev是的,您在定義ID列時指定了IDENTITY,即爲主鍵指定了自動增量字段,將其刪除,並且您的代碼應該很好去 – Habib 2012-04-05 19:12:58

+0

不幸的是,同樣的錯誤「_Server生成的鍵和服務器生成的鍵值不支持SQL Server Compact._「出現...我已更新我的問題與我的**。sqlce **文件的內容。 – Dev 2012-04-06 07:48:16