1

我正在使用 NHibernate (v3.3) 将我的域模型类加载/保存到数据库。我创建了一堆 View Model 类以在 MVC3 网站的前端使用。所以我打算使用 AutoMapper (v2.1) 将视图模型类映射到域类。

我已经在两个类 Restaurant 和 RestaurantViewModel 之间定义了 Map 配置。这是方法:

    public void Create(IConfiguration configuration)
    {
        if (configuration == null)
            throw new ArgumentNullException("configuration");

        IMappingExpression<RestaurantViewModel, Restaurant> map =
            configuration.CreateMap<RestaurantViewModel, Restaurant>();

        map.ForMember(x => x.Address, o => o.ResolveUsing(x => new Address
                                                                {
                                                                       BuildingNumber = x.BuildingNumber,
                                                                    City = x.City,
                                                                    PostalCode = x.PostalCode,
                                                                    Street = x.Street
                                                                }));

        map.ForMember(x => x.Categories, o => o.Ignore());
        map.ForMember(x => x.Photo, o => o.Ignore());
    }

但是在调用Mapper.Map<RestaurantViewModel>(restaurant)时出现异常;

这是异常的文本:

Missing type map configuration or unsupported mapping.

Mapping types:
RestaurantProxy -> RestaurantViewModel
RestaurantProxy -> FoodDelivery.Website.Models.RestaurantViewModel

Destination path:
RestaurantViewModel

Source value:
FoodDelivery.DataDomain.Restaurant

看起来 NHibernate 在我的 Restaurant 周围创建名为 RestaurantProxy 的代理,所以当我要求 AutoMapper 将 Restaurant 映射到 RestaurantViewModel 时,它实际上映射了 Proxy,并且因为该映射器没有 Map 会引发异常。

有什么方法可以修复代码吗?

4

1 回答 1

3

看起来您的错误是在映射RestaurantRestaurantViewModel. 您的映射似乎只覆盖了另一个方向的映射,即视图模型到实体。

试试加这个?

configuration.CreateMap<Restaurant, RestaurantViewModel>();

这应该允许您将餐厅实体映射到您的视图模型。

于 2012-05-21T20:48:32.453 回答