Schotime의 의견을 바탕으로, 나는 절반 해결책 쿼리 결과에서 hstore
을 개체로 구문 분석합니다. 누군가가 다른 해결책을 원할 경우를 대비하여이 질문을 공개하고 있습니다.
내 매퍼를 정의해야합니다. 분명히 일반적인 유형의 PetaPoco의 기본 매핑을 사용하고자하므로 StandardMapper
은 속성이없는 PetaPoco.IMapper
의 필드를 구현하기 때문에 작동하지 않습니다. - 따라서이를 재정의 할 수 없습니다. 그 (것)들을 숨긴다, 그러나 그것은 진짜로 돕지 않는다).
내가 대신 한 직접 IMapper
을 구현하고 PetaPoco.IMapper
의 인스턴스에 일정한 유형을 위임하는 것이었다 무엇 :
public class MyMapper:PetaPoco.IMapper{
private PetaPoco.StandardMapper standardMapper=new PetaPoco.StandardMapper();
public PetaPoco.TableInfo GetTableInfo(Type pocoType){
return standardMapper.GetTableInfo(pocoType);
}
public PetaPoco.ColumnInfo GetColumnInfo(PropertyInfo pocoProperty){
return standardMapper.GetColumnInfo(pocoProperty);
}
public Func<object, object> GetFromDbConverter(PropertyInfo TargetProperty, Type SourceType){
if(TargetProperty.PropertyType==typeof(HStore)){
return (x)=>HStore.Create((string)x);
}
return standardMapper.GetFromDbConverter(TargetProperty,SourceType);
}
public Func<object, object> GetToDbConverter(PropertyInfo SourceProperty){
if(SourceProperty.PropertyType==typeof(HStore)){
return (x)=>((HStore)x).ToSqlString();
}
return standardMapper.GetToDbConverter(SourceProperty);
}
}
HStore
개체가 Schotime's gist의 하나에 유사하게 구성된다.
나는 또한 매퍼 등록해야합니다. 내가 쿼리에서 읽을 때이 모든 것이 완벽하게 작동, 이제
PetaPoco.Mappers.Register(Assembly.GetAssembly(typeof(MainClass)),new MyMapper());
PetaPoco.Mappers.Register(typeof(HStore),new MyMapper());
을 -하지만 난 (쿼리 매개 변수를 쓸 때 나는 GetToDbConverter
을 정의하더라도 그것은 내 보인다 mapper는 단순히 쿼리 매개 변수를 작성할 때 호출되지 않습니다. 어떻게해야할까요?
NPoco는 매핑을 사용자 정의하는 방법이 포함 된 PetaPoco 포크입니다 .Hostore 및 DateTimeOffset을 포함한 PostgreSQL에 대한 작업을 이미 완료했습니다. . 내게 핑 소리를 내고 twitter에서 더 많은 정보를 얻을 수있다. – Schotime
다음 기본 샘플을 보려면이 GIST를 체크 아웃 할 수있다 : htt ps : //gist.github.com/schotime/6314871 – Schotime
@Schotime NuGet 갤러리에없는 npgsql2를 사용하기 때문에 NPoco를 사용할 수 없습니다 (갤러리의 npgsql은 버전 2입니다).,하지만 여전히 호출됩니다. 'npgsql' 때문에 NPoco는 인식하지 못합니다). 그래도 원래의 PetaPoco에서 구현할 수있는 솔루션을 찾아내는 방향을 제시 했으므로 귀하의 요지는 매우 도움이되었습니다. –