是否可以使用带有nhibernate的automapper?

时间:2012-05-21 20:26:44

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

我使用NHibernate(v3.3)将我的域模型类加载/保存到数据库。我已经在MVC3网站的前端创建了大量的View Model类。所以我计划使用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&lt; RestaurantViewModel&gt;(餐厅);

时我遇到了异常

这是例外文本:

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在我的餐厅周围创建代理名称RestaunrantProxy,所以当我要求AutoMapper将Restaurant映射到RestaurantViewModel时,它实际上映射了Proxy,因为该mapper没有Map会引发异常。

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

1 个答案:

答案 0 :(得分:3)

看起来您的错误在将Restaurant映射到RestaurantViewModel时遇到了问题。您的映射仅显示为覆盖另一方向的映射,将模型视图为实体。

尝试添加此内容?

configuration.CreateMap<Restaurant, RestaurantViewModel>();

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