Запрос не пытается вставить в столбец идентификаторов, но выдает ошибку: Невозможно вставить явный ... столбец идентификаторов ..., когда Identity_Insert выключен - PullRequest
0 голосов
/ 29 февраля 2012

Я просто пытаюсь вставить новую запись в нашу базу данных SQL Server.Вставка происходит изнутри веб-службы WCF с использованием LINQ.

Таблица 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

Все является внешним ключом, кроме конфликта_report_id и конфликта_даты.Вот вставка из службы WCF в C #:

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();

Это должна быть прямая вставка, но она продолжает выдавать следующую ошибку:

Невозможно вставить явное значение для столбца идентификации в таблице'd_coord_report_conflict', когда для IDENTITY_INSERT установлено значение OFF.

Насколько я понимаю, этого не должно происходить.Кроме того, включение IDENTITY_INSERT не является приемлемым решением, как я уверен, что вы понимаете.

ОБНОВЛЕНИЕ: Я восстановил значения каждого поля, если оно передается в запрос LINQ, и предпринял попыткуручная вставка из SQL Server Management Studio, и она работала нормально.нет ошибок вообще.Есть идеи?

Заранее спасибо.

1 Ответ

0 голосов
/ 15 мая 2012

Какой запрос вы написали в методе db.d_coord_report_conflicts.InsertOnSubmit (конфликт)?Будь то сохраненный процесс или встроенный SQL-запрос в C #, проверьте правильность имен и порядка столбцов.помните: вы не должны передавать значение / упоминать имя столбца идентификатора в запросе 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())

Обратите внимание, что я нигде не упоминал столбец идентификаторов в запросе вставки, так как его значение заполняется автоматически. Надеюсь, это имеет смысл!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...