2011-02-07 7 views
3

ASP.NET MVC&AutoMapper(移入ビューモデル親から&子ドメインオブジェクト)

public class ComponentType 
{ 
    public int ComponentTypeID { get; set; } 
    public string Component_Type { get; set; } 
    public string ComponentDesc { get; set; } 
} 

public class AffiliateComponentType 
{ 
    public int AffiliateComponentID { get; set; } 
    public int AffiliateID { get; set; } 
    public ComponentType ComponentType { get; set; } 
    public bool MandatoryComponent { get; set; } 
    public bool CanBeBookedStandalone { get; set; } 
    public int PreferenceOrder { get; set; } 
} 

私はNHibernateはを使用してDBからAffiliateComponentTypeのリストを取得します。今度は、AffiliateComponentTypeドメインオブジェクトのLISTからAffiliateComponentTypeView(View Model)のリストを作成しなければなりません。 AutoMapperを使ってこれをどのように達成できますか?

[Serializable] 
public class AffiliateComponentTypeView 
{ 
    public int ComponentTypeID { get; set; } 
    public string Component_Type { get; set; } 
    public string ComponentDesc { get; set; } 
    public bool MandatoryComponent { get; set; } 
    public bool CanBeBookedStandalone { get; set; } 
    public int PreferenceOrder { get; set; } 
} 

答えて

2

次のマッピングがflattening your modelの仕事行う必要があります。

​​

を、あなたが変更した場合、このようなあなたのビューモデル:

[Serializable] 
public class AffiliateComponentTypeView 
{ 
    public int ComponentTypeComponentTypeID { get; set; } 
    public string ComponentTypeComponent_Type { get; set; } 
    public string ComponentTypeComponentDesc { get; set; } 
    public bool MandatoryComponent { get; set; } 
    public bool CanBeBookedStandalone { get; set; } 
    public int PreferenceOrder { get; set; } 
} 

平坦化はそれほど標準規則を使用してAutoMapperによって自動的に実行されますあなたが必要とするのは次のとおりです:

Mapper.CreateMap<AffiliateComponentType, AffiliateComponentTypeView>(); 

wil Component_Typeのプロパティでは、AutoMapperのデフォルトの命名規則と衝突するため、名前を変更する必要がある可能性があります。

あなたが定義されたマッピングを持っていたら、マップすることができ:

IEnumerable<AffiliateComponentType> source = ... 
IEnumerable<AffiliateComponentTypeView> dest = Mapper.Map<IEnumerable<AffiliateComponentType>, IEnumerable<AffiliateComponentTypeView>>(source); 
+0

おかげでダーリンを。私はあなたから提案された最初のアプローチを使用しました。どうもありがとう... – Alex

1

どこかのアプリで、あなたはAutoMapperを設定するコードのブロックを持っていますので、私はあなたがそうのように見えるブロックがあるだろう推測している:一度、その後

Mapper.CreateMap<ComponentType, AffiliateComponentTypeView>(); 
Mapper.CreateMap<AffiliateComponentType, AffiliateComponentTypeView>(); 

をあなたがそうのようなあなたのビューモデルを構築するよ、戻ってNHibernateはからあなたのモデルを持っている:

var model = Session.Load<AffiliateComponentType>(id); 
var viewModel = Mapper.Map<AffiliateComponentType, 
    AffiliateComponentTypeView>(model); 
if (model.ComponentType != null) 
    Mapper.Map(model.ComponentType, viewModel); 

は、あなたが向かっている場所、これはあなたを取得願っています!

関連する問題