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

NPOCO: Why is my custom Mapper not called

在我的一个实体中,我需要一个特殊的映射,它将分隔的字符串(来自数据库)转换为字典。 我认为更优雅的方法是使用自定义映射器,而不是使用一些虚拟 属性 here

我的问题是从未调用映射器的任何方法,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

好的,所以我刚刚升级到 NPoco v3,它比预期的要顺利(只需要更改一些小代码部分以匹配重大更改)

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

无论如何:使用 v3 我的映射器被调用。 也许这是 v2 中的错误?

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

我目前使用的是 v3.4.1