使用 dapper 扩展时添加多个地图
Adding multiple maps when using dapper extensions
我正在使用 dapper 扩展并且对 class mapper 有疑问。不幸的是,我的大多数 table 都需要对它们进行一些映射,例如不同的模式等。
所以我发现我通常会按照以下方式更换 DefaultMapper:
public Hierarchies HierarchyGetByName(string aName)
{
Hierarchies result;
using (SqlConnection cn = GetSqlConnection())
{
cn.Open();
Type currModelMapper = DapperExtensions.DapperExtensions.DefaultMapper;
try
{
DapperExtensions.DapperExtensions.DefaultMapper = typeof(HierarchiesMapper);
IFieldPredicate predicate = Predicates.Field<Hierarchies>(f => f.Name, Operator.Eq, aName);
result = cn.GetList<Hierarchies>(predicate).FirstOrDefault();
}
finally
{
DapperExtensions.DapperExtensions.DefaultMapper = currModelMapper;
}
cn.Close();
}
return result;
}
如果我访问 2 table,那么我必须执行两次。
有没有办法一次添加所有映射器 类 来表示一个集合,并根据正在访问的 table 选择正确的映射器?
您可以在您的应用中添加一组 类,将自定义重新映射应用于您的实体。例如,这 3 个空 类 将 PrefixDapperTableMapper 应用于配置文件和 FileNotificationAdhocRecipient 类,而将 AnotherDifferentTypeOfDapperClassMapper 应用于 NotificationProfile。
public class ProfileMapper : PrefixDapperTableMapper<Domain.Entities.Profile>
{
}
public class FileNotificationAdhocRecipientMapper : PrefixDapperTableMapper<Domain.Entities.FileNotificationAdhocRecipient>
{
}
public class NotificationProfileMapper : AnotherDifferentTypeOfDapperClassMapper<Domain.Entities.NotificationProfile>
{
}
并且您的实际映射代码存在于单独的映射器中(我没有显示 AnotherDifferentTypeOfDapperClassMapper 但这与下面类似)
public class PrefixDapperTableMapper<T> : ClassMapper<T> where T : class
{
public PrefixDapperTableMapper()
{
AutoMap();
}
//name or schema manipulations in some overrides here.
}
只要它们在同一个程序集中,DapperExtensions 就会找到并使用它们,或者您可以使用类似于以下的代码设置映射程序集:
DapperExtensions.DapperExtensions.SetMappingAssemblies({ typeof(ProfileMapper ).Assembly })
我正在使用 dapper 扩展并且对 class mapper 有疑问。不幸的是,我的大多数 table 都需要对它们进行一些映射,例如不同的模式等。
所以我发现我通常会按照以下方式更换 DefaultMapper:
public Hierarchies HierarchyGetByName(string aName)
{
Hierarchies result;
using (SqlConnection cn = GetSqlConnection())
{
cn.Open();
Type currModelMapper = DapperExtensions.DapperExtensions.DefaultMapper;
try
{
DapperExtensions.DapperExtensions.DefaultMapper = typeof(HierarchiesMapper);
IFieldPredicate predicate = Predicates.Field<Hierarchies>(f => f.Name, Operator.Eq, aName);
result = cn.GetList<Hierarchies>(predicate).FirstOrDefault();
}
finally
{
DapperExtensions.DapperExtensions.DefaultMapper = currModelMapper;
}
cn.Close();
}
return result;
}
如果我访问 2 table,那么我必须执行两次。
有没有办法一次添加所有映射器 类 来表示一个集合,并根据正在访问的 table 选择正确的映射器?
您可以在您的应用中添加一组 类,将自定义重新映射应用于您的实体。例如,这 3 个空 类 将 PrefixDapperTableMapper 应用于配置文件和 FileNotificationAdhocRecipient 类,而将 AnotherDifferentTypeOfDapperClassMapper 应用于 NotificationProfile。
public class ProfileMapper : PrefixDapperTableMapper<Domain.Entities.Profile>
{
}
public class FileNotificationAdhocRecipientMapper : PrefixDapperTableMapper<Domain.Entities.FileNotificationAdhocRecipient>
{
}
public class NotificationProfileMapper : AnotherDifferentTypeOfDapperClassMapper<Domain.Entities.NotificationProfile>
{
}
并且您的实际映射代码存在于单独的映射器中(我没有显示 AnotherDifferentTypeOfDapperClassMapper 但这与下面类似)
public class PrefixDapperTableMapper<T> : ClassMapper<T> where T : class
{
public PrefixDapperTableMapper()
{
AutoMap();
}
//name or schema manipulations in some overrides here.
}
只要它们在同一个程序集中,DapperExtensions 就会找到并使用它们,或者您可以使用类似于以下的代码设置映射程序集:
DapperExtensions.DapperExtensions.SetMappingAssemblies({ typeof(ProfileMapper ).Assembly })