Как вставить строку в базу данных SQL с IDENTITY_INSERT, установленной в OFF, с помощью служб WCF? - PullRequest
1 голос
/ 02 октября 2010

В таблице SQL установлено свойство автоинкремента для первичного ключа AnnotationID типа INT.

Код службы WCF приложения Silverlight:

    public void InsertImageAnnotation(int imageId, string imagePath)
    {
        DataClassDataContext db = new DataClassDataContext();
        ImageAnnotation row = new ImageAnnotation();

        row.ImageID = imageId;//foreign key
        row.ImagePath = imagePath;

        db.ImageAnnotations.InsertOnSubmit(row);
        db.SubmitChanges();            
    }

Исключение выдается в db.SubmitChanges () с сообщением: Невозможно вставить явное значение для столбца идентификатора в таблице ImageAnnotations, когда для IDENTITY_INSERT установлено значение OFF.

Я не указываю первичный ключ, который должен быть ключом идентификации, потому что я ожидаю, что БД позаботится об автоматическом увеличении значения первичного ключа.

Сценарий создания таблицы находится здесь:

USE [ImagingSericesDB]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo]. [ImageAnnotations] (

[AnnotationID] [int] IDENTITY(0,1) NOT NULL,

[ImageID] [int] NOT NULL,

[ImagePath] [text] NULL,

CONSTRAINT [PK_ImageAnnotations] ПЕРВИЧНЫЙ КЛЮЧ КЛАСТЕРНЫЙ

( [AnnotationID] ASC

) С (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [ОСНОВНОЙ]

) ВКЛ [ПЕРВИЧНЫЙ] TEXTIMAGE_ON [ПЕРВИЧНЫЙ]

GO

ALTER TABLE [dbo]. [ImageAnnotations] с проверкой и ограничением [FK_ImageAnnotations_Images] FOREIGN KEY ([ImageID]) ССЫЛКИ [dbo]. [Images] ([AIImageID]) GO

ALTER TABLE [dbo]. [ImageAnnotations] ПРОВЕРЬТЕ ОГРАНИЧЕНИЕ [FK_ImageAnnotations_Images]

Чего мне не хватает в моем синтаксисе вызовов служб? Как я могу указать или выполнить IDENTITY_INSERT для ON в моем сервисном коде выше? Какой синтаксис? Большое спасибо, Val

1 Ответ

1 голос
/ 03 октября 2010

Вы отправляете значение для поля идентификатора, когда оно хочет создать его автоматически.Вот что означает сообщение об ошибке.Проверьте, какой код вы генерируете, чтобы увидеть, в чем проблема.Также вполне возможно, что проблема не в вашей вставке, а в вставке из триггера, поэтому проверьте это также.Либо вы отправляете значение идентификатора, которое вам не нужно отправлять, либо вам не следует использовать идентификатор для генерации идентификатора.Вставка идентификатора обычно используется только dbas для вставки устаревших данных до запуска базы данных.Он очень редко должен использоваться в любое другое время и никогда кем-то, кто должен спросить синтаксис.Это команда, которая может по-королевски испортить вашу базу данных, не используйте ее.

...