Dapper 마이크로 ORM, 데이터베이스 불가지론 및 MySql Guid 유형

c# dapper mysql orm sqlite

문제

나는 애완 동물 프로젝트에서 Dapper 를 실험하고 있습니다. SQLite 를 사용하여 모든 테스트와 MySql을 "프로덕션"으로 실행합니다. 그러나 나는 데이터베이스 불가지론 적 상황을 다루기 위해 Dapper를 가장 효과적으로 사용하는 방법을 잘 모릅니다.

내가 겪고있는 특정 문제는 기본 키에 대한 GUID 유형지원하지 않는 MySql과 같습니다. 따라서 varchar (40) 를 유형으로 사용하고 있습니다 (SQLite는 GUID 인 고유 식별자를 지원합니다). MySql 데이터베이스에서 선택하려고 할 때 아래와 같은 일반 저장소가있는 경우 문제가 발생합니다. 왜냐하면 varchar 유형이 guid 유형과 일치하지 않기 때문에 Id 속성 유형이 Guid이고 Dapper가 " 열 분석 중 열 10 "을 throw하기 때문입니다.

Id 속성을 guid에서 int로 변경하면 GetById 내부의 원시 sql도 더 작성하기가 어려울 것입니다. 1. 트랜잭션 시작, 2. 삽입, 3. 마지막으로 삽입 된 ID 선택 및 리턴. 그래서 데이터베이스 타입이 mysql 인 경우 last_insert_id 를 사용하거나 sqlite 인 경우 last_insert_rowid 를 사용 합니까 ? 원시 sql 구문은 데이터베이스와 매우 다를 것이기 때문에 ...

public IEnumerable<T> GetById(Guid id) //convention: Id is always of type Guid.
{
  return UnitOfWork.DbConnection.Query<T>(
      string.Format(
        "select * from {0} where Id = @Id", typeof (T).Name), new {Id = id});
}

다른 예로는 리턴 된 행의 수를 제한하는 것 (특히 페이징의 경우) 등이 있습니다. 그렇다면 어떻게 dapper를 사용하여 데이터베이스 불가지론 원시 SQL 쿼리를 작성하겠습니까? 어쩌면 제 상황에서 Dapper가 적합하지 않을 수 있습니까? 아마도 나는 여기에 같은 오래된 NHibernate를 사용해야한다. 어떤 제안? 내가 잘못하고 있니? 감사!

인기 답변

MySQL에서 기본 키의 데이터 유형으로 CHAR (36)을 사용하려고하면 MySQL 커넥터 버전 6.3.4를 사용 중입니다. MySQl 커넥터가 GUID로 변환합니다. Dapper와 함께 작동합니다.




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