0

私のエンティティの 1 つで、区切り文字列 (DB から) をディクショナリに変換する特別なマッピングが必要です。ダミーのプロパティを使用する代わりに、こちらで説明されているように、よりエレガントな方法はカスタムマッパーになると思いました

私の問題は、マッパーからのメソッドが呼び出されず、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