2012-11-20 4 views
0

를 수행 단정 ORM과 SQLite는 내가 내 SQLite 데이터베이스에 간단한 테이블을 가지고 쿼리

CREATE TABLE ProductCategories 
(
    Id INTEGER PRIMARY KEY AUTOINCREMENT, 
    Name NVARCHAR(128) NOT NULL UNIQUE, 
    ImageUrl NVARCHAR(256), 
    ParentCategoryId INTEGER, 
    FOREIGN KEY (ParentCategoryId) REFERENCES ProductCategories(Id) ON UPDATE CASCADE ON DELETE CASCADE 
); 

내가 Devart의 SQLite는 ADO.NET 공급자의 무료 버전을 사용하십시오. 그것은 잘 작동하고 Dapper ORM을 사용하는 것에 대해 생각하지만 형식 매핑에 약간의 문제가 있습니다. 테이블에서 ParentCategoryId 필드가 INT32에 캐스트 할 수 없기 때문에

var categories = connection.Query<ProductCategory>("SELECT * FROM ProductCategories"); 
foreach (var c in categories) 
{ 
    Console.WriteLine(c.Id + " " + c.Name + " " + c.ImageUrl + " " + c.ParentCategoryId); 
} 

은 내가 execption를 얻을 : 나는 이런 식으로 뭔가를 시도한다면

public class ProductCategory 
{ 
    public Int32 Id { get; set; } 
    public String Name { get; set; } 
    public String ImageUrl { get; set; } 
    public Int32? ParentCategoryId { get; set; } 
} 

다음 ProductCategories 테이블에 대한 나는 클래스를 가지고 ? ParentCategoryId. 또한 ADO.NET ExecuteReader를 사용할 경우 항상 nullable 필드를 확인할 수 있으며 외래 키가 설정되지 않은 경우 null입니다. 그래서이 테이블에 적합한 데이터 매핑을 찾고 있습니다.

+1

일반적으로 dapper가 전송에 실패하면 원본 데이터의 유형을 알려줍니다. 뭐라고 써 있니? 또는 원시 ado.net 언급했기 때문에 GetFieldType()은 해당 col-index를 반환합니까? –

+0

문제가 발견되었습니다. SQLite INTEGER는 64 비트이지만 Int32를 사용합니까? 상위 카테고리. 그래서 테이블의 INTEGER 타입을 INT로 변경했습니다. 이제는 모두 ok입니다. – shadeglare

+0

아마 답변으로 추가 –

답변

0

해결책을 찾았습니다. INTEGER가 64 비트이므로 캐스팅 문제가 없으므로 ParentCategoryId 유형을 INT로 변경했습니다.

관련 문제