【问题标题】:Is it possible to use automapper with nhibernate?是否可以将 automapper 与 nhibernate 一起使用?
【发布时间】:2012-05-21 20:26:43
【问题描述】:

我正在使用 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(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 会引发异常。

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

【问题讨论】:

    标签: asp.net-mvc-3 nhibernate automapper


    【解决方案1】:

    您的错误似乎是在将Restaurant 映射到RestaurantViewModel 时遇到问题。您的映射似乎只覆盖了另一个方向的映射,即视图模型到实体。

    尝试添加这个?

    configuration.CreateMap<Restaurant, RestaurantViewModel>();
    

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

    【讨论】:

    • 你说得对,我未能正确地将地图餐厅加载到 RestaurantViewModel(带有内部标记的类,配置模块没有找到它)。抱歉打扰了这么愚蠢的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2016-04-01
    • 2011-01-20
    • 2018-08-11
    • 2021-08-05
    • 2019-03-18
    • 2014-03-15
    相关资源
    最近更新 更多