1

ドメイン モデル クラスをデータベースにロード/保存するために NHibernate (v3.3) を使用しています。MVC3 Web サイトのフロント エンドで使用するビュー モデル クラスの束を作成しました。そのため、AutoMapper (v2.1) を使用してビュー モデル クラスをドメイン クラスにマップすることを計画していました。

Restaurant と RestaurantViewModel の 2 つのクラス間で 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 がレストランの周りに RestaunrantProxy という名前でプロキシを作成しているように見えるため、AutoMapper にレストランを RestaurantViewModel にマップするように依頼すると、実際にプロキシがマップされ、そのマッパーのマップがないため、例外がスローされます。

コードを修正する方法はありますか?

4

1 に答える 1

3

エラーで を にマッピングする際に問題が発生しているようRestaurantですRestaurantViewModel。あなたのマッピングは、ビューモデルからエンティティへの反対方向のマッピングのみをカバーしているように見えます。

これを追加してみては?

configuration.CreateMap<Restaurant, RestaurantViewModel>();

これにより、Restaurant エンティティをビュー モデルにマップできるようになります。

于 2012-05-21T20:48:32.453 に答える