在我的一个实体中,我需要一个特殊的映射,它将分隔字符串(来自数据库)转换为字典。而不是使用一些虚拟属性,我认为更优雅的方式是自定义映射器,如此处所述
我的问题是从未调用过映射器中的任何方法,并且 NPOCO 尝试将我的 db-string 转换为显然失败的字典。
也许我误解了映射器或遗漏了一些东西。但无法解释为什么它不起作用。
我的映射(简化)
public class MyEntityMap : Map<MyEntity>
{
public MyEntity()
{
Columns(x =>
{
x.Column(c => c.SpecialColumn).WithName("SpecialColumn");
}, true);
}
}
我的映射器(不做太多)
public class MyMapper : DefaultMapper
{
public override Func<object, object> GetFromDbConverter(MemberInfo destMemberInfo, Type sourceType)
{
return base.GetFromDbConverter(destMemberInfo, sourceType);
}
public override Func<object, object> GetFromDbConverter(Type destType, Type sourceType)
{
return base.GetFromDbConverter(destType, sourceType);
}
public override bool MapMemberToColumn(MemberInfo pi, ref string columnName, ref bool resultColumn)
{
return base.MapMemberToColumn(pi, ref columnName, ref resultColumn);
}
public override void GetTableInfo(Type t, TableInfo ti)
{
base.GetTableInfo(t, ti);
}
}
我的数据层(构造函数)
protected SimpleDepot()
{
//SQL Server / MySQL
if (!mappingInitialized)
{
NPocoDatabaseFactory.Setup("connectionstring");
mappingInitialized = true;
}
Database = NPocoDatabaseFactory.DbFactory.GetDatabase();
Database.Mapper = new MyMapper();
PocoData = Database.PocoDataFactory.ForType(typeof(TEntity));
}
因此,至少在我看来,一切都井井有条。任何我想念的想法。我目前正在使用 NPOCO 2.9.103 但我正在检查是否可以更新到 v3