4

私のプロジェクトで非常に奇妙なことが起こりました.私は非常に単純なオブジェクトCLRを持っています.ModelViewModelWebApi ASP.NETModel

マッパーが正常にマッピングされたことを確認できたら、2 回目はすべてを null で返します。そうではない問題が常に発生します。

非常に重要: 更新 14.03.2013
アプリケーションをリサイクルすると停止しますが、しばらくすると再び実行し始めweb.configます。ファイルを再保存すると、再び問題ありません。

これが私のモデル/ビューモデルです:

public class Gallery : Entity
{
    public override long Id { get; set; }
    public virtual Settings SiteOwner { get; set; }
    public virtual Category Category { get; set; }
    public virtual string PageTitle { get; set; }
    public virtual string TitleDescription { get; set; }
    public virtual string GalleryTitle { get; set; }
    public virtual IList<UIItem> GalleryItems { get; set; }
}

public class UIItem : Entity
{
    public override long Id { get; set; }
    public virtual Product Product { get; set; }
    public virtual Gallery Gallery { get; set; }
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
    public virtual string Price { get; set; }
    public virtual string ImageUrl { get; set; }
    public virtual string VideoUrl { get; set; }
    public virtual string FileUrl { get; set; }
}
public class GalleryViewModel
{
    public virtual string PageTitle { get; set; }
    public virtual string TitleDescription { get; set; }
    public virtual string GalleryTitle { get; set; }
    public virtual IList<UIItemViewModel> GalleryItems { get; set; }
}

public class UIItemViewModel
{
    public virtual long Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
    public virtual string Price { get; set; }
    public virtual string ImageUrl { get; set; }
    public virtual string VideoUrl { get; set; }
    public virtual string FileUrl { get; set; }
}

これが私がそれを使用する方法です

// my apicontroller

// FindGalleryByAppIdAndCategoryId returns => Gallery 
var source = _galleryRepository.FindGalleryByAppIdAndCategoryId(appId, catId);
return Mapper.DynamicMap<GalleryViewModel>(source);
4

3 に答える 3

3
  1. virtual非ナビゲーション プロパティをキーワードでマークしたのはなぜですか? 1 対 1、1 対多、多対多、および複合型の関係に関係するプロパティのみをvirtualキーワードでマークして、遅延読み込みを適用できます。

2.

Mapper.CreateMap<UIItem,UIItemViewModel>();
...
UIItemViewModel result = Mapper.Map<UIItem,UIItemViewModel>(your UIItem);

特別なマッピング ロジックが必要な場合は、次のようにすることができます。

Mapper.CreateMap<UIItem,UIItemViewModel>().ConvertUsing(new ModelToViewModelConverter());
...
UIItemViewModel result = Mapper.Map<UIItem,UIItemViewModel>(your UIItem);
...

コンバーターは次のようになります。

public class ModelToViewModelConverter : ITypeConverter<UIItem,UIItemViewModel>
    {
        public UIItemViewModel Convert(ResolutionContext context)
        {
            UIItem item = (UIItem)context.SourceValue;
            // Perform your convertion logic 
        }
    }

同様に、コレクションからコレクションまで、すべてのエンティティをマップできます。

于 2013-03-15T13:38:22.330 に答える
2

これは、Gallery と UIItem が相互参照している場合に発生する可能性が最も高いです。

public class Gallery : Entity
{
    public virtual IList<UIItem> GalleryItems { get; set; }
}

public class UIItem : Entity
{
    public virtual Gallery Gallery { get; set; }
}

コードでこのケースをテストしていただけますか?

于 2013-03-14T09:04:10.310 に答える
1

使ってみませんか

Mapper.Map<Source,Destination>(source); 

また

Mapper.Map(source);

そして、あなたが宣言したことを確認してください

CreateMap<Source, Destination>();

2 つのタイプの CreateMap を宣言できる場合に Dynamic Map を使用する理由がわかりません。この方法でこの動作を経験するべきではありません。

于 2013-03-14T16:26:24.690 に答える