왜 DapperExtension의 Update 메소드가 실행에 실패했는지 알 수 있습니까?

c# dapper dapper-extensions sql sqlite

문제

나는 NuGet을 통해 최신 SQLite, Dapper 및 DapperExtensions를 사용하고 있습니다.

여기 내 테이블의 스키마가 ...

CREATE TABLE `LibraryInfo` (
    `Id`    INTEGER NOT NULL,
    `Name`  TEXT NOT NULL CHECK(length ( Name ) > 0),
    `Description`   TEXT,
    `Version`   TEXT NOT NULL CHECK(length ( Version ) > 0),
    PRIMARY KEY(Id)
);

그것에는 다음과 같은 데이터가있는 하나의 행이 있습니다.

Id = "0"
Name = "테스트 라이브러리"
설명 = "이것은 테스트 라이브러리입니다"
버전 = "1.2.3.4"

저 테이블에 대한 내 POCO가 있습니다 ...

public class LibraryInfo
{
    public int    Id          { get; set; }
    public string Name        { get; set; }
    public string Description { get; set; }
    public string Version     { get; set; }
}

다음은 DapperExtensions를 초기화하는 방법입니다 (내 테이블은이 테이블을 제외하고 복수형 임).

DapperExtensions.DapperExtensions.DefaultMapper = typeof(PluralizedAutoClassMapper<>);

public class LibraryInfoMapper : ClassMapper<LibraryInfo>
{
    public LibraryInfoMapper()
    {
        Table(nameof(LibraryInfo));
        AutoMap();
    }
}

데이터베이스에서 ID가 0 인 단일 행을 읽을 수있는 코드는 다음과 같습니다.

var libraryInfo = connection.Get<LibraryInfo>(0);

그건 잘 작동합니다. 그러나, 이것은 실패 ...

libraryInfo.Description = "Test";
connection.Update(libraryInfo);

여기 예외는 ...

System.Data.SQLite.SQLiteException이 발생했습니다. 오류 코드 = 1 HResult = -2147467259 메시지 = SQL 논리 오류 또는 "."근처의 누락 된 데이터베이스 : 구문 오류 Source = System.Data.SQLite StackTrace : at System.Data.SQLite.SQLite3.Prepare ( SQLiteConnection cnn, 문자열 strSql, SQLiteStatement 이전, UInt32 timeoutMS, 문자열 & strRemain) InnerException :

왜 그런지 모르겠다! 생성하는 SQL을 보는 방법을 알아 내려고 노력하고 있지만 그렇게 할 수 있는지 또는 가능한지 여부를 알지 못합니다.

도움!!!

수락 된 답변

이 문제는 DapperExtensions 내에서 SQL 생성을위한 기본 언어 인 SqlServer가 내부적으로 생성 된 SQL이 Sqlite가 지원하지 않는 테이블 별칭으로 생성되었음을 의미합니다. 명령을 실행하기 전에 Dapper Extensions SQL 언어를 Sqlite로 변경해야합니다.

DapperExtensions.DapperExtensions.SqlDialect = new DapperExtensions.Sql.SqliteDialect();

이 기능이 변경되면 Dapper Extensions는 SQL 명령을 Sqlite 형식으로 만듭니다.



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