1
所以我有一个移动服务运行良好,并希望添加DTOs的符号。 我使用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'
我用AutoMapper来映射een我的模型和DTOs模型,但数据库的复杂性和我想要的结果迫使我使用自定义解析器,这反过来抛出空异常。 Ofcourse我不想把它设置为true! 我想创建一个数据库请求并搜索Favorites表中的一行并将其设置为该值。正如您所看到的,此搜索基于用户身份验证(每个用户每次联系我拥有多行最爱)。 – Nikatlas 2014-12-02 13:19:20
我编辑了一些应该可以工作的代码,但我相信你必须做相当多的工作才能让它按照你想要的方式工作。 – 2014-12-02 13:30:40
将配置更改为: cfg.CreateMap()。ConvertUsing(new ContactToMobileContactTypeConverter()); cfg.CreateMap (); 并添加了您提供的代码。 调试显示转换方法从未执行! 新的日志是: LINQ to Entities不支持指定的类型成员'Id'。只支持初始化器,实体成员和实体导航属性。更多更多 –
Nikatlas
2014-12-02 13:48:08