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?语法是什么? 非常感谢, 瓦尔
答案 0 :(得分:1)
当您想要自动创建身份字段时,您正在发送该值。这就是错误信息的含义。检查您生成的代码以查看问题所在。完全有可能问题不在你的插入中,而是在触发器的插入中,所以也要检查它。
在任何情况下都不应将标识插入设置为开启。您要么发送不需要发送的标识值,要么不应使用标识来生成标识。标识插入通常仅由dbas用于在数据库上线之前插入遗留数据。它应该很少在任何其他时间使用,并且永远不会被那些必须要求语法的人使用。这是一个可以使数据库搞砸的命令,不要使用它。