类型的异常“AutoMapper.AutoMapperMappingException”发生在Aut

2019-06-25 13:21发布

不知怎的,我的代码不能正常工作的话(它的工作完全相同的代码之前)。 这就是问题:

代码

我想一些对象映射到与此代码的ViewModels:

组态:

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));

用法:

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);
}

错误

这将导致以下错误:

类型的异常“AutoMapper.AutoMapperMappingException”发生在AutoMapper.dll但在用户代码中没有处理

调试数据

首先,我保证有通过调用没有配置错误:

Mapper.AssertConfigurationIsValid();

我已经设置断点都在我的代码,并尝试调试它,但我无法理解它。 在“项目”集合填充数据(由实体框架生成的代理类),但在“的ViewModels”收集充满了奇怪的数据。 它有说这是一个“消息”:

映射类型:BookcaseItem_B9B52593B2659AC05C47AB2A6E0F7AEA9989CC34D3527DF5B6AA988ED57166FB - >字符串System.Data.Entity.DynamicProxies.BookcaseItem_B9B52593B2659AC05C47AB2A6E0F7AEA9989CC34D3527DF5B6AA988ED57166FB - > System.String

目标路径:FoundBookcaseItemViewModel.Authors

来源值:System.Data.Entity.DynamicProxies.BookcaseItem_B9B52593B2659AC05C47AB2A6E0F7AEA9989CC34D3527DF5B6AA988ED57166FB

再有就是,说堆栈跟踪特性:

在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()

在System.Linq.SystemCore_EnumerableDebugView`1.get_Items()

哦,终于有一个名为“语境”与下列数据的属性:

谁能解释一下是怎么回事,为什么我的代码不能正常工作下去? 我做了一些改动,以我的解决方案最近,但我滚他们回来的Git,所以他们不应该对代码的任何影响。

我的设置

  • 的Visual Studio 12 RC
  • ASP.NET MVC 4
  • .NET框架4.0(我有4.5,但造成了太多的错误,所以我使用Git回滚到4.0版本)
  • 实体框架5.0 RC
  • AutoMapper 2.1.267

实体和视图模型

我不知道这是否是相关的,但这里是该映射的源类:

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";
    }
}

这是该映射的目标类:

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; }
}

Answer 1:

好像有一个与映射Authors属性的问题。 如果作者序列为空或空此汇总调用会抛出异常。

.ForMember(x => x.Authors, 
           opt => opt.MapFrom(src => src.Book.Authors.Select(x => x.Name).Aggregate((i, j) => i + ", " + j)))


文章来源: An exception of type 'AutoMapper.AutoMapperMappingException' occurred in AutoMapper.dll but was not handled in user code