在我的一个实体中,我需要一个特殊的映射,它将分隔的字符串(从数据库)转换为字典。 我没有使用某些虚拟属性,而是认为更优雅的方式是自定义映射器,如here
所述我的问题是没有调用mapper中的任何方法,NPOCO会尝试将我的db-string转换为明显失败的字典。
也许我误解了映射器或者遗漏了某些东西。但无法解释为什么它不起作用。
我的映射(简化)
public class MyEntityMap : Map<MyEntity>
{
public MyEntity()
{
Columns(x =>
{
x.Column(c => c.SpecialColumn).WithName("SpecialColumn");
}, true);
}
}
我的Mapper(不做太多)
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
答案 0 :(得分:0)
好的,所以我刚刚升级到NPoco v3,它比怀疑更平滑(只需更改一些小代码部分以匹配重大变化)
请参阅https://github.com/schotime/NPoco/wiki/Version-3了解更改。
无论如何:使用v3我的mapper会被调用。 也许这是v2中的一个错误?
如果您对v2有同样的问题,请考虑升级到v3(有可能会或可能不会影响您的重大更改)
我目前正在使用v3.4.1