Как вставить данные, если столбец первичного ключа не является столбцом идентификаторов?

Я пытаюсь вставить данные, используя 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,

Другие вопросы по тегам