AutoMapper.dll中出现类型“AutoMapper.AutoMapperMappingException”的异常,但未在用户代码中处理 [英] An exception of type 'AutoMapper.AutoMapperMappingException' occurred in AutoMapper.dll but was not handled in user code
问题描述
不知怎的,我的代码不再工作了(以前使用完全相同的代码)。这是问题:
代码
我正在尝试映射一些使用此代码的ViewModels对象:
配置:
.CreateMap< BookcaseItem,FoundBookcaseItemViewModel>()
.ForMember(x => x.Title,opt => opt.MapFrom(src => src.Book.Title))
.ForMember x => x.Authors,opt => opt.MapFrom(src => src.Book.Authors.Select(x => x.Name).Aggregate((i,j)=> i + ,+ j)))
.ForMember(x => x.Identifiers,opt => opt.MapFrom(src =>(!string.IsNullOrEmpty(src.Book.Isbn10)?(ISBN10 :+ src.Book.Isbn10 +\r\\\
):string.Empty)+
(!string.IsNullOrEmpty(src.Book.Isbn13)?(ISBN13:+ src.Book .Isbn13):string.Empty)))
.ForMember(x => x.Pages,opt => opt.MapFrom(src => src.Book.Pages))
.ForMember (x => x.ImageUri,opt => opt.MapFro m(src => src.Book.ThumbnailUriSmall));
用法:
public ActionResult Index()
{
string facebookId = _accountService.GetLoggedInUserFacebookId();
IEnumerable< BookcaseItem> items = _bookcaseItemService.GetBookcaseItemsForUser(facebookId);
IEnumerable< FoundBookcaseItemViewModel> viewModels = items.Select(Mapper.Map< BookcaseItem,FoundBookcaseItemViewModel>);
返回PartialView(viewModels);
}
错误
这会导致以下错误:
AutoMapper中出现了类型AutoMapper.AutoMapperMappingException的异常。 dll但未在用户代码中处理
调试数据
首先,我通过调用以确保没有配置错误:
Mapper.AssertConfigurationIsValid();
我已经在我的代码中设置了断点,并尝试调试,但是我不能感觉。 'items'集合中填有数据(由Entity Framework生成的代理类),但'viewModels'集合中填满了奇怪的数据。它有一个消息,说:
映射类型:
BookcaseItem_B9B52593B2659AC05C47AB2A6E0F7AEA9989CC34D3527DF5B6AA988ED57166FB
- > String System.Data .Entity.DynamicProxies.BookcaseItem_B9B52593B2659AC05C47AB2A6E0F7AEA9989CC34D3527DF5B6AA988ED57166FB
- > System.String
目标路径:FoundBookcaseItemViewModel.Authors
源值:
System.Data.Entity.DynamicProxies.BookcaseItem_B9B52593B2659AC05C47AB2A6E0F7AEA9989CC34D3527DF5B6AA988ED57166FB
然后有一个stacktrace属性说: / p>
在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
在System.Linq.SystemCore_EnumerableDebugView`1.get_Items()
哦,最后还有一个名为context的属性,其中包含以下数据:
任何人都可以解释这里发生了什么,为什么我的代码不工作不再?我最近对我的解决方案做了一些修改,但是我已经把它们放回Git了,所以不应该对代码有任何影响。
我的设置
- Visual Studio 12 RC
- ASP.NET MVC 4
- .NET Framework 4.0(我有4.5但是引起了太多错误,所以我用Git回滚到4.0版)
- 实体框架5.0 RC
- AutoMapper 2.1.267
实体和ViewModel / p>
我不知道是否相关,但这里是映射的源类:
public class BookcaseItem:Entity
{
public Guid Id {get;组; }
public bool IsRenting {get;组; }
public bool IsSwapping {get;组; }
public bool IsSelling {get;组; }
public decimal RentingPrice {get;组; }
public decimal SellingPrice {get;组; }
public string Currency {get;组; }
public bool IsAvailable {get;组; }
public virtual Guid BookId {get;组; }
public virtual Guid UserId {get;组; }
public virtual Book Book {get;组; }
public virtual User User {get;组; }
public BookcaseItem()
{
IsAvailable = true;
Currency =USD;
}
}
这是映射的目标类: / p>
public class FoundBookcaseItemViewModel
{
public Guid Id {get;组; }
public bool IsRenting {get;组; }
public bool IsSwapping {get;组; }
public bool IsSelling {get;组; }
public decimal RentingPrice {get;组; }
public decimal SellingPrice {get;组; }
public string标题{get;组; }
public string Authors {get;组; }
public string标识符{get;组; }
public int Pages {get;组; }
public string ImageUri {get;组; }
}
映射Authors属性的问题。如果Authors序列为空或为空,则此聚合调用将抛出异常。
.ForMember(x => x.Authors ,
opt => opt.MapFrom(src => src.Book.Authors.Select(x => x.Name).Aggregate((i,j)=> i +,+ j)))
Somehow my code doesn't work any more (it did work before with the exact same code). This is the problem:
The code
I'm trying to map some objects to ViewModels with this code:
Configuration:
Mapper.CreateMap<BookcaseItem, FoundBookcaseItemViewModel>()
.ForMember(x => x.Title, opt => opt.MapFrom(src => src.Book.Title))
.ForMember(x => x.Authors, opt => opt.MapFrom(src => src.Book.Authors.Select(x => x.Name).Aggregate((i, j) => i + ", " + j)))
.ForMember(x => x.Identifiers, opt => opt.MapFrom(src => (!string.IsNullOrEmpty(src.Book.Isbn10) ? ("ISBN10: " + src.Book.Isbn10 + "\r\n") : string.Empty) +
(!string.IsNullOrEmpty(src.Book.Isbn13) ? ("ISBN13: " + src.Book.Isbn13) : string.Empty)))
.ForMember(x => x.Pages, opt => opt.MapFrom(src => src.Book.Pages))
.ForMember(x => x.ImageUri, opt => opt.MapFrom(src => src.Book.ThumbnailUriSmall));
The usage:
public ActionResult Index()
{
string facebookId = _accountService.GetLoggedInUserFacebookId();
IEnumerable<BookcaseItem> items = _bookcaseItemService.GetBookcaseItemsForUser(facebookId);
IEnumerable<FoundBookcaseItemViewModel> viewModels = items.Select(Mapper.Map<BookcaseItem, FoundBookcaseItemViewModel>);
return PartialView(viewModels);
}
The error
This results in the following error:
An exception of type 'AutoMapper.AutoMapperMappingException' occurred in AutoMapper.dll but was not handled in user code
The debug data
First of all I ensure that there are no configuration errors by calling:
Mapper.AssertConfigurationIsValid();
I've set breakpoints all over my code and try to debug it, but I can't make sense of it. The 'items' collection is filled with data (proxy classes generated by Entity Framework), but the the 'viewModels' collection is filled with strange data. It has a 'message' that says this:
Mapping types: BookcaseItem_B9B52593B2659AC05C47AB2A6E0F7AEA9989CC34D3527DF5B6AA988ED57166FB -> String System.Data.Entity.DynamicProxies.BookcaseItem_B9B52593B2659AC05C47AB2A6E0F7AEA9989CC34D3527DF5B6AA988ED57166FB -> System.String
Destination path: FoundBookcaseItemViewModel.Authors
Source value: System.Data.Entity.DynamicProxies.BookcaseItem_B9B52593B2659AC05C47AB2A6E0F7AEA9989CC34D3527DF5B6AA988ED57166FB
And then there's a stacktrace property that says:
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.SystemCore_EnumerableDebugView`1.get_Items()
Oh and finally there's another property called 'context' with the following data:
Can anyone explain what's going on here and why my code isn't working any longer? I did a couple of changes to my solution recently, but I've rolled them back by Git, so they shouldn't have any effect on the code.
My setup
- Visual Studio 12 RC
- ASP.NET MVC 4
- .NET Framework 4.0 (I had 4.5 but that caused too many errors, so I rolled back with Git to version 4.0)
- Entity Framework 5.0 RC
- AutoMapper 2.1.267
The entity and ViewModel
I don't know if it's relevant, but here is the source class for the mapping:
public class BookcaseItem : Entity
{
public Guid Id { get; set; }
public bool IsRenting { get; set; }
public bool IsSwapping { get; set; }
public bool IsSelling { get; set; }
public decimal RentingPrice { get; set; }
public decimal SellingPrice { get; set; }
public string Currency { get; set; }
public bool IsAvailable { get; set; }
public virtual Guid BookId { get; set; }
public virtual Guid UserId { get; set; }
public virtual Book Book { get; set; }
public virtual User User { get; set; }
public BookcaseItem()
{
IsAvailable = true;
Currency = "USD";
}
}
And this is the destination class for the mapping:
public class FoundBookcaseItemViewModel
{
public Guid Id { get; set; }
public bool IsRenting { get; set; }
public bool IsSwapping { get; set; }
public bool IsSelling { get; set; }
public decimal RentingPrice { get; set; }
public decimal SellingPrice { get; set; }
public string Title { get; set; }
public string Authors { get; set; }
public string Identifiers { get; set; }
public int Pages { get; set; }
public string ImageUri { get; set; }
}
It seems like there is a problem with mapping Authors property. This Aggregate call will throw an exception if the Authors sequence is null or empty.
.ForMember(x => x.Authors,
opt => opt.MapFrom(src => src.Book.Authors.Select(x => x.Name).Aggregate((i, j) => i + ", " + j)))
这篇关于AutoMapper.dll中出现类型“AutoMapper.AutoMapperMappingException”的异常,但未在用户代码中处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!