查询不尝试插入标识列但是收到错误:当Identity_Insert关闭时,无法插入显式...标识列...

时间:2012-02-29 14:57:10

标签: c# sql linq sql-server-2008

我只是想在我们的SQL Server数据库中插入一条新记录。插件是使用LINQ从WCF Web服务中发生的。

表d_coord_report_conflict的结构如下:

conflict_report_id int NOT NULL IDENTITY PRIMARY KEY,
booking_id int,
conflict_date date,
coord_user_id int
guide_one_user_id int,
guide_two_user_id int,
product_id int,
price_id int

除了conflict_report_id和conflict_date之外,所有内容都是外键。 这是C#中WCF服务的插入:

d_coord_report_conflict conflict = new d_coord_report_conflict
{
         booking_id = bookingID,
         conflict_date = date,
         coord_user_id = Convert.ToInt32(item.coordID),
         guide_one_user_id = pax.user_id_guide,
         guide_two_user_id = Convert.ToInt32(item.guideID),
         product_id = Convert.ToInt32(item.productID),
         price_id = Convert.ToInt32(item.priceID)
};

db.d_coord_report_conflicts.InsertOnSubmit(conflict);
db.SubmitChanges();

它应该是一个直接的插入,但它不断抛出以下错误:

当IDENTITY_INSERT设置为OFF时,无法在表'd_coord_report_conflict'中为identity列插入显式值。

据我所知,这不应该发生。此外,打开IDENTITY_INSERT是不可接受的解决方案,因为我相信你理解。

UPDATE:我恢复了每个字段的值,因为它被传递到LINQ查询并尝试从SQL Server Management Studio中手动插入,并且它运行正常。没有任何错误。有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

你在方法db.d_coord_report_conflicts.InsertOnSubmit(冲突)中写了什么查询? 无论是存储过程还是c#中的内联sql查询,都要检查列名和顺序是否正确。 请记住:您不能在INSERT查询中传递标识列的值/提及名称。

如果您的表格是这样的

Create table Test 
{   
     testId int not null identity primary key,   
     testName varchar(50),   createdDate datetime 
}

您的INSERT查询应该类似于

INSERT INTO TEST(testName,createdDate) values ('New Test', getdate())

观察我没有在insert查询中的任何地方提到identity列,因为它的值会自动填充 希望这是有道理的!