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