【问题标题】:Query not attempting to insert into identity column but getting error : Cannot insert explicit ... identity column ... when Identity_Insert is off查询未尝试插入标识列但出现错误:无法插入显式...标识列...当 Identity_Insert 关闭时
【发布时间】:2023-03-18 10:44:01
【问题描述】:

我只是试图在我们的 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_INSERT 不是一个可接受的解决方案。

更新:我恢复了每个字段的值,它被传递到 LINQ 查询中,并尝试从 SQL Server Management Studio 中手动插入,它工作正常。完全没有错误。有什么想法吗?

提前致谢。

【问题讨论】:

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


【解决方案1】:

你在方法 db.d_coord_report_conflicts.InsertOnSubmit(conflict) 中写了什么查询? 无论是存储过程,还是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())

请注意,我在插入查询的任何地方都没有提到标识列,因为它的值是自动填充的 希望这是有道理的!

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 2017-10-26
    • 2016-05-13
    • 1970-01-01
    • 2013-01-28
    • 2015-07-02
    • 2016-08-18
    • 2019-03-10
    相关资源
    最近更新 更多