【发布时间】:2015-01-30 16:44:01
【问题描述】:
所以我有一个运行良好的移动服务,并且想要添加 DTO 符号。 我使用 AutoMapper 在我的模型和 DTO 模型之间进行映射,但是数据库的复杂性和我想要的结果迫使我使用自定义解析器,这反过来又会引发空异常。
具体来说——映射器初始化
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Contact, MobileContact>()
.ForMember(mobcont => mobcont.Favorite, map => map.ResolveUsing<ContactResolver>());//.UseValue(true));//
cfg.CreateMap<MobileContact, Contact>();
});
我的自定义解析器是
public class ContactResolver : ValueResolver<Contact, bool>
{
protected override bool ResolveCore(Contact a)
{
return true;
}
}
已编辑:收藏夹当然是布尔值
如果我不使用自定义解析器并使用 .UseValue(true) 就可以了
尽管如上所示的自定义解析器的常见 get 请求会引发以下异常:
Exception=System.NullReferenceException: Object reference not set to an instance of an object.
at AutoMapper.QueryableExtensions.Extensions.ResolveExpression(PropertyMap propertyMap, Type currentType, Expression instanceParameter)
at AutoMapper.QueryableExtensions.Extensions.CreateMemberBindings(IMappingEngine mappingEngine, TypePair typePair, TypeMap typeMap, Expression instanceParameter, IDictionary`2 typePairCount)
at AutoMapper.QueryableExtensions.Extensions.CreateMapExpression(IMappingEngine mappingEngine, TypePair typePair, Expression instanceParameter, IDictionary`2 typePairCount)
at AutoMapper.QueryableExtensions.Extensions.CreateMapExpression(IMappingEngine mappingEngine, TypePair typePair, IDictionary`2 typePairCount)
at AutoMapper.QueryableExtensions.Extensions.<>c__DisplayClass1`2.<CreateMapExpression>b__0(TypePair tp)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at AutoMapper.Internal.DictionaryFactoryOverride.ConcurrentDictionaryImpl`2.GetOrAdd(TKey key, Func`2 valueFactory)
at AutoMapper.QueryableExtensions.Extensions.CreateMapExpression[TSource,TDestination](IMappingEngine mappingEngine)
at AutoMapper.QueryableExtensions.ProjectionExpression`1.To[TResult]()
at Microsoft.WindowsAzure.Mobile.Service.MappedEntityDomainManager`2.Query()
at azmobtestService.Models.MobileContactDomainManager.Query() in c:\Users\n.atlas\Source\Repos\JPhoneBook\Service\azmobtestService\Models\MobileContactDomainManager.cs:line 104
at Microsoft.WindowsAzure.Mobile.Service.TableController`1.Query(), Id=75849f58-ccb0-4a6b-8a77-491f13fcb717, Category='App.Controllers.Tables'
【问题讨论】:
标签: c# automapper azure-mobile-services dto