NPOCO:为什么我的自定义Mapper没有被调用

时间:2016-07-12 07:36:58

标签: c# npoco

在我的一个实体中,我需要一个特殊的映射,它将分隔的字符串(从数据库)转换为字典。 我没有使用某些虚拟属性,而是认为更优雅的方式是自定义映射器,如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

1 个答案:

答案 0 :(得分:0)

好的,所以我刚刚升级到NPoco v3,它比怀疑更平滑(只需更改一些小代码部分以匹配重大变化)

请参阅https://github.com/schotime/NPoco/wiki/Version-3了解更改。

无论如何:使用v3我的mapper会被调用。 也许这是v2中的一个错误?

如果您对v2有同样的问题,请考虑升级到v3(有可能会或可能不会影响您的重大更改)

我目前正在使用v3.4.1