2013-02-22 55 views
1

我有兩種複雜類型:一種進入服務層,作爲ViewModel和其他存儲庫層。 他們被定義爲如下:用於自定義複雜類型的AutoMapper

//The Repository Layer 
public class ProductDetailsEntity 
     { 
      public Int64 StockNumber { get; set; } 

      public String StockName { get; set; } 

      public String Image { get; set; } 

      public Decimal Price { get; set; } 

      public String JewelleryName { get; set; } 

      public String ShortDescription { get; set; } 

      public Int64 ShippingDays { get; set; } 

      public String DesignCode { get; set; } 

      public List<SettingDetails> SettingsDetails { get; set; } 

      public List<SideStoneDetails> SideStoneDetails { get; set; } 
     } 

// The Service Layer 
public class ProductDetailsModel 
    { 
     public Int64 StockNumber { get; set; } 

     public String StockName { get; set; } 

     public String Image { get; set; } 

     public Decimal Price { get; set; } 

     public String JewelleryName { get; set; } 

     public String ShortDescription { get; set; } 

     public Int64 ShippingDays { get; set; } 

     public String DesignCode { get; set; } 

     public List<SettingDetailsModel> SettingsDetails { get; set; } 

     public List<SideStoneDetailsModel> SideStoneDetails { get; set; } 
    } 

有SettingsDetailsModel以及SettingDetails爲:

public class SettingDetails // same Structure with different Names 
    { 
     public Int64 AttributeId { get; set; } 

     public String AttributeName { get; set; } 

     public String AttributeValue { get; set; } 

    } 

而且SideStoneDetailsModel和SideStoneDetails爲:現在

public class SideStoneDetailsModel 
    { 
     public Int64 SideStoneSettingId { get; set; } 

     public String SideStoneSettingName { get; set; } 

     public String SideStoneSettingValue { get; set; } 
    } 

,而映射從實體到一個模型, 它是拋出一個AutoMapper例外說明:

現在
The following property on Repository.Entities.SettingDetails cannot be mapped: 
SettingsDetails 
Add a custom mapping expression, ignore, add a custom resolver, or modify the destination type Service.Models.SettingDetailsModel. 
Context: 
Mapping to property SettingsDetails of type Repository.Entities.SettingDetails from source type Service.Models.SettingDetailsModel 
Mapping to property SettingsDetails of type System.Collections.Generic.List`1[[Repository.Entities.SettingDetails, Repository, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] from source type System.Collections.Generic.List`1[[Service.Models.SettingDetailsModel, Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 
Mapping to type Repository.Entities.ProductDetailsEntity from source type Service.Models.ProductDetailsModel 
Exception of type 'AutoMapper.AutoMapperConfigurationException' was thrown. 

,映射器實現包含

Mapper.CreateMap<SettingDetails, SettingDetailsModel>(); 
Mapper.CreateMap<SideStoneDetails, SideStoneDetailsModel>(); 
Mapper.CreateMap<ProductDetailsModel, ProductDetailsEntity>(); 
Mapper.AssertConfigurationIsValid(); 

其基本上沒有自定義類型的列表。我不明白的地方是哪裏錯了: Uptill現在我發現是:

  • 添加單獨的映射爲不同的類型。檢查!
  • 自定義映射函數 - 但爲什麼?在這種情況下,我不知道爲什麼要這樣做?

我該如何解決?我想從庫中的實體映射到我的視圖模型

回答

1

你真的是這一行:

Mapper.CreateMap<ProductDetailsModel, ProductDetailsEntity>(); 

還是你想圓創建地圖的其他方式?

Mapper.CreateMap<ProductDetailsEntity, ProductDetailsModel>(); 

我不知道要映射哪個方向,但如果你確實希望你將不得不從SettingDetailsModel定義映射回SettingDetails前者,那就是:

Mapper.CreateMap<SettingDetails, SettingDetailsModel>(); 
+0

我希望它從Repository映射到ViewModels。對不起,萬一不清楚。 – bhuvin 2013-02-22 13:10:37

+0

是否要從ProductDetailsModel映射到ProductDetailsEntity?如果是的話,請在我的帖子中按照建議。如果不是,那麼交換你的第三個映射語句。 – wal 2013-02-22 13:11:56

+0

令人驚訝的是我的啞...... – bhuvin 2013-02-22 13:20:39

相關問題