기본 키 열이 ID 열이 아닌 경우 데이터를 어떻게 삽입합니까?

c# dapper dapper-contrib sql-server

문제

기본 키 열이 ID 열이 아닌 테이블에 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'테이블; 열이 널을 허용하지 않습니다. INSERT가 실패합니다.

Dapper는 관습에 따라 Id 가 기본 키라고 정확하게 가정하지만 ID 열이라고 잘못 가정합니다. ID 열이 아닌 것을 어떻게 나타낼 수 있습니까?

수락 된 답변

이 문제점에 따라 ExplicitKey 특성을 사용할 수 있습니다.

public class Foo
{
    [ExplicitKey]
    public int Id { get; set; }

    public string Name { get; set; }
}

당신이 호출 할 때 일반적으로 반환 값이 삽입 된 항목의 ID가 아닙니다 Insert 대신 항상 0 .



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.