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입니다. 그래서이 테이블에 적합한 데이터 매핑을 찾고 있습니다.
일반적으로 dapper가 전송에 실패하면 원본 데이터의 유형을 알려줍니다. 뭐라고 써 있니? 또는 원시 ado.net 언급했기 때문에 GetFieldType()은 해당 col-index를 반환합니까? –
문제가 발견되었습니다. SQLite INTEGER는 64 비트이지만 Int32를 사용합니까? 상위 카테고리. 그래서 테이블의 INTEGER 타입을 INT로 변경했습니다. 이제는 모두 ok입니다. – shadeglare
아마 답변으로 추가 –