2009-12-01 46 views
3

我想用我的域實體ICustomer與AutoMapper映射CustomerDTO。對於第一個繼承級別,一切都可以正常工作,但對其他繼承級別不會。AutoMapper用通用類型的繼承

我用我的域模型的接口,因爲具體類型由StructureMap從我的LinqToSql數據庫基礎架構層注入。

public interface IBaseEntity<TPk> 
{ 
    TPk Id { get; } 
} 

public interface ICustomer : IBaseEntity<int> 
{ 
    string Email { get; set; } 
} 

[DataContract] 
public class CustomerDTO 
{ 
    [DataMember] 
    public int Id { get; set; } 

    [DataMember] 
    public string Email { get; set; } 
} 

現在AutoMapper映射

Mapper.CreateMap<CustomerDTO, ICustomer>(); 

Mapper.CreateMap<ICustomer, CustomerDTO>(); 

Mapper.AssertConfigurationIsValid(); 

現在在哪兒我使用的映射

public CreateCustomerServiceResult CreateCustomer(CustomerDTO customer) 
    { 
     var result = new CreateCustomerServiceResult(); 
     try 
     { 
      var originalMapped = Mapper.DynamicMap<CustomerDTO, ICustomer>(customer); 

      var newCustomer = _customerService.CreateCustomer(originalMapped); 

      var newMapped = Mapper.DynamicMap<ICustomer, CustomerDTO>(newCustomer); 

      result.Customer = newMapped; 
     } 
     catch (Exception ex) 
     { 

     } 
     return result; 
    } 

我有一個Dictionnary的 「ID」 屬性缺少鍵異常 ...

回答

1

Got it!

的問題是由於IBaseEntity的「ID」屬性的缺失二傳手。

改變它的一切工作後,其他

public interface IBaseEntity<TPk> 
{ 
    TPk Id { get; set; } 
} 
+0

一兩件事 - 沒有必要做「DynamicMap」 - 這是唯一保留的,你不知道在編譯時類型案件。只需使用Mapper.Map即可。 – 2009-12-02 03:45:49