4

これは間違いなく独特の問題であり、同じ問題を抱えている人を誰も見つけられなかったので、問題が何であるかを実際に知っている人を見つけられることを願っています.

私は言った:

public class ViewModel
{
     public string TestString { get; set; }
     public ChildObject Child { get; set; }
     public List<Children> Children { get; set; }
}

さて、コントローラーでオブジェクトをマッピングすると...つまり

TestObject testObject = Repository.GetObject() // This is my Entity Framework object (with dynamic proxies attached to it)
Mapper.Map(ViewModel, testObject);

そして、私のマッピングは次のように定義されています。

Mapper.CreateMap<ViewModel, TestObjectType>();
Mapper.CreateMap<ViewModelChildView, TestObjectChildType>();

すべてが正常にマップされるので、ViewModel のセットアップとフォームが適切に作成されました。問題は?それが興味深い部分です。

ChildObject私の元のオブジェクトと同様に、DynamicProxy (Entity Framework) です。ただし、 は通常のリストに設定されます(List<Children>元のリストが の DynamicProxy であってもList<Children>)。

これは、コンテキストに適切にバインドされていないため、Entity Framework がこのリストにアクセスできないことを意味します。私は一日中、運がない回避策を見つけようとしました。そこに何かアイデアはありますか?

編集

これらは私の実際のオブジェクトバインディングです:

 Mapper.CreateMap<CompanyViewModel, Company>();
 Mapper.CreateMap<CompanyCategoryViewModel, CompanyCategory>(); // I've ever tried removing this line.
 Mapper.CreateMap<List<CompanyCategoryViewModel>, List<CompanyCategory>>();

コントローラ:

Mapper.Map(companyViewModel, company);

Company オブジェクト = Dynamic Proxy CompanyCategories list サブオブジェクト (Company の)、マップ、ただし Dynamic Proxy ではありません。

4

2 に答える 2

2

Childオブジェクトタイプとコレクションの両方のマッピングが必要です。あなたが持っているならあなたはList<>あなたの中で指定する必要がありList<>ますCreateMap(それはで動作しませんIEnumerable

Mapper.CreateMap<ViewModel, TestObjectType>();
Mapper.CreateMap<ViewModelChildView, TestObjectChildType>();
Mapper.CreateMap<List<ViewModelChildView>>, List<TestObjectChildType>>();

これが私の再現コードを含むGISTです。

写真を完成させるために、AutoMapperの最新の事前実現バージョンを使用しました2.2.1-ci9004.

于 2013-02-18T09:11:11.503 に答える
1

つまり、基本的に私が思う唯一の違いは、マップの作成方法です。

おそらく隣に

   Mapper.CreateMap<ViewModelChildView, TestObjectChildType>();

次のようなリストマッピングも作成する必要があります

   Mapper.CreateMap<IEnumerable<ViewModelChildView>, IEnumerable<TestObjectChildType>>();
于 2013-02-13T14:07:12.263 に答える