2012-04-05 4 views
0

Я создаю приложение на основе Entity Framework 4, которое использует SQL Server CE 3.5 в качестве хранилища данных.System.Data.UpdateException в SaveChanges() с SQL Server CE

У меня есть пустой файл .sdf, сгенерированный с помощью скрипта .sqlce, созданного по модели данных сущности.

Когда я запускаю этот код:

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 Я знаю, что при использовании с Entity Framework SQL Server CE 3.5 не поддерживает автоматически генерируемые первичные ключи. В моем случае, однако, я явно устанавливаю атрибут ID элемента, который я добавляю.

Есть ли что-то еще не так?

EDIT:

Это содержание моего .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

ответ

1

Установка идентификатора явно из кода не будет ничего делать, если вы установите его в автоматический прирост в базе данных. Вы можете либо использовать uniqueidentifier, либо изменить первичный ключ в таблице и удалить автоматическое приращение. Затем вы сможете установить Id в значение из кода. Отметить эту тему Server-generated keys and server-generated values are not supported by SQL Server Compact

+0

Привет и спасибо за ваш ответ! Это 'CREATE TABLE' внутри моего **. Sqlce **:' CREATE TABLE [ItemsSet] ([ID] int IDENTITY (1,1) NOT NULL, ...) 'И затем:' ALTER TABLE [ItemsSet] ADD CONSTRAINT [PK_ItemsSet] ПЕРВИЧНЫЙ КЛЮЧ ([ID]); Вы думаете, что здесь что-то не так? – Dev

+1

@Dev Да, вы указали IDENTITY при определении столбца идентификатора, который указывает поле автоматического приращения для первичного ключа, удалите его, и ваш код должен быть хорошим, чтобы идти – Habib

+0

К сожалению, та же ошибка «_Server-сгенерированные ключи и сгенерированные сервером значения не поддерживаются SQL Server Compact._ "появляется ... Я обновил свой вопрос с содержимым моего **. sqlce ** файла. – Dev