如何使用WCF服务将IDENTITY_INSERT设置为OFF,将行插入SQL数据库?

时间:2010-10-02 14:19:12

标签: sql silverlight wcf insert

SQL表具有为INT类型的主键AnnotationID设置的自动增量属性。

Silverlight应用程序WCF服务代码:

    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()上抛出异常,并显示以下消息:当IDENTITY_INSERT设置为OFF时,无法在表ImageAnnotations中为identiy列插入显式值。

我没有指定主键,它应该是标识键,因为我希望db会负责自动递增主键值。

表格创建脚本在这里:

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] PRIMARY KEY CLUSTERED

(     [AnnotationID] ASC

) WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON)ON [PRIMARY]

)ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo]。[ImageAnnotations] WITH CHECK ADD CONSTRAINT [FK_ImageAnnotations_Images] FOREIGN KEY([ImageID])REFERENCES [dbo]。[Images]([AIImageID]) GO

ALTER TABLE [dbo]。[ImageAnnotations] CHECK CONSTRAINT [FK_ImageAnnotations_Images]

我的服务调用语法中缺少什么?如何在上面的服务代码中指定或执行IDENTITY_INSERT为ON?语法是什么? 非常感谢, 瓦尔

1 个答案:

答案 0 :(得分:1)

当您想要自动创建身份字段时,您正在发送该值。这就是错误信息的含义。检查您生成的代码以查看问题所在。完全有可能问题不在你的插入中,而是在触发器的插入中,所以也要检查它。

在任何情况下都不应将标识插入设置为开启。您要么发送不需要发送的标识值,要么不应使用标识来生成标识。标识插入通常仅由dbas用于在数据库上线之前插入遗留数据。它应该很少在任何其他时间使用,并且永远不会被那些必须要求语法的人使用。这是一个可以使数据库搞砸的命令,不要使用它。