데이터베이스에 대한 잘못된 값 Dapper Column Value

c# dapper

문제

C #으로 Dapper를 사용하여 저장 프로 시저의 결과를 얻습니다. 표 ( TPTable )는 Pid 를 기본 키로, Value 을 두 번째 열의 이름으로, 그리고 다른 일부 열을 갖습니다. 나는 가게가있다 : select * from TPTable .

QueryAsync<TPTableModel> 메서드를 호출하면 값 열의 값이 항상 기본 키와 같습니다.

DB로 말하자.

Pid = 1, 값 = 2

Pid = 2, 값 = 568

결과는 {{Pid = 1, Value = 1}, {Pid = 2, Value = 2}} 목록이됩니다.

왜 내가 Value 를 PrimaryKey와 같을까요?

수락 된 답변

나는 그 문제를 발견했다. Dapper와는 다르다. 나는 작은 프로젝트를 repro했고 저장소에 SQL 사용자 정의 유형의 내부 조인이 있다는 것을 알았습니다. 이 형식에는 기본 키 값을 가진 Value라는 열이 있습니다. 상점에서 select *를 사용하여 Dapper를 호출하면 사용자 정의 유형의 값을 채 웁니다.

sqlserver의 PrintScreen


전문가 답변

로컬에서 올바르게 작동합니다.

[Fact]
public async void SO35470588_WrongValuePidValue()
{
    // nuke, rebuild, and populate the table
    try { connection.Execute("drop table TPTable"); } catch { }
    connection.Execute(@"
create table TPTable (Pid int not null primary key identity(1,1), Value int not null);
insert TPTable (Value) values (2), (568)");

    // fetch the data using the query in the question, then force to a dictionary
    var rows = (await connection.QueryAsync<TPTable>("select * from TPTable"))
        .ToDictionary(x => x.Pid);

    // check the number of rows
    rows.Count.IsEqualTo(2);

    // check row 1
    var row = rows[1];
    row.Pid.IsEqualTo(1);
    row.Value.IsEqualTo(2);

    // check row 2
    row = rows[2];
    row.Pid.IsEqualTo(2);
    row.Value.IsEqualTo(568);
}
public class TPTable
{
    public int Pid { get; set; }
    public int Value { get; set; }
}

조사하게되어 기쁩니다 만, 재현은 대단히 감사하겠습니다.



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