0

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

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

4

1 回答 1

0

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

有关重大更改,请参阅https://github.com/schotime/NPoco/wiki/Version-3

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

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

我目前正在使用 v3.4.1

于 2016-07-12T07:48:23.233 回答