Как вставить данные, если столбец первичного ключа не является столбцом идентификаторов?
Я пытаюсь вставить данные, используя Dapper.Contrib, в таблицу, где столбец первичного ключа не является столбцом идентификаторов.
Таблица базы данных создается с помощью этого скрипта:
begin transaction
create table
dbo.Foos
(
Id int not null,
Name nvarchar(max) not null
)
go
alter table
dbo.Foos
add constraint
PK_Foos primary key clustered
(
Id
)
go
commit
Это класс C#:
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
При вставке данных, как это:
connection.Insert(new Foo()
{
Id = 1,
Name = "name 1"
});
Я получаю следующую ошибку:
Невозможно вставить значение NULL в столбец "Id", таблица "FooDatabase.dbo.Foos"; столбец не допускает нулевые значения. Вставить не удается.
Дэппер правильно предполагает, что Id
является первичным ключом, но он неверно предполагает, что это столбец идентификации. Как я могу указать, что это не столбец идентификации?
1 ответ
Вы можете использовать ExplicitKey
атрибут согласно этой проблеме.
public class Foo
{
[ExplicitKey]
public int Id { get; set; }
public string Name { get; set; }
}
Обратите внимание, что возвращаемое значение не является идентификатором вставленного элемента, как это обычно бывает при вызове Insert
но вместо этого всегда 0
,