我只是想在我们的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中手动插入,并且它运行正常。没有任何错误。有什么想法吗?
提前致谢。
答案 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列,因为它的值会自动填充 希望这是有道理的!