2012-09-11 55 views
0

更改映射規則我有一個模型的視圖模型AutoMapper

public class Product : BaseEntity 
    { 
     private string _name; 

     public string Name 
     { 
      get { return _name; } 
      private set{_name = value;} 
     } 

     public decimal Price { get; set; } 
     public double Weight { get; set; } 
     public double Width { get; set; } 
     public double Height { get; set; } 
     public double Depth { get; set; } 
     public DateTime DateAdded { get; set; } 
     ... 
     public string GeneralInfo {get{//some get logic}...} 
} 

和視圖模型:

public sealed class ProductDetailsModel 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public decimal Price { get; set; } 
     public double Weight { get; set; } 
     public double Width { get; set; } 
     public double Height { get; set; } 
     public double Depth { get; set; } 
     ... 
     public string GeneralInfo {get;set;} 
} 

和控制器:

public class ProductController : Controller 
{ 
    ... 

public ActionResult Details(int id) 
     { 
      var product = _productRepository.GetProduct(id); 
      var productViewModel = Mapper.Map<ProductDetailsModel>(product); 
      return View(productViewModel); 
     } 
    ... 
} 

一切都很正常,但.. 。我有一些獲取產品模型一般信息屬性的邏輯,它從數據庫中獲取這個一般信息,有時,當產品不'沒有一般信息,這個屬性返回null。我需要的是產生從可用的屬性如用,高度等喜歡的東西替代一般信息:

private string GenerateGeneralInfoFromProductProperties() 
     { 
      var generalInfoStringBuilder = new StringBuilder(); 
      generalInfoStringBuilder.Append(@"<b>Width: </b>").Append(Width).Append("</br>"); 
      generalInfoStringBuilder.Append(@"<b>Weight: </b>").Append(Weight).Append("</br>"); 
      ... 
      return generalInfoStringBuilder.ToString(); 
     } 

如果我這個邏輯添加到產品模型......

public class Product : BaseEntity 
{ 
    ... 
    public string GeneralInfo 
     { 
      get 
      { 
       var gInfo = getGeneralInfoFromBD(); 
       if (gInfo==null) 
        gInfo = GenerateGeneralInfoFromProductProperties(); 
       return gInfo; 
      } 
      set { SetPropertyValue(ProductPropertyType.GeneralInfo, value); } 
     } 
} 

一切正常很好,但它會是錯誤的和不合邏輯的,因爲我有一個視圖模型來表示產品細節,所以我想添加這個邏輯來查看模型,但是我的視圖模型實例是由mapper創建的,產品視圖模型沒有構造函數通過產品實例來獲取它的一般信息,因爲,正如我所說的,它不需要在構造函數中。我如何添加這個「一般信息,如果null」替換邏輯映射器,或查看模型?

回答

0

嘗試AfterMap

Automapper.CreateMap<Product,ProductDetailsModel>() 
    .AfterMap((p,pm) => { 
     // now you have access to both objects, so you can do whatever you please 
    }); 
相關問題