2017-02-11 13 views
1

У меня есть следующий код:AutoMapper и игнорируя столбец

Интерфейсы

namespace Core.Interfaces 
{ 
    public interface ILoanApplicationBase 
    { 
     string ContactName { get; set; } 
     string Email { get; set; } 
    } 
} 

namespace App1.Core.Interfaces 
{ 
    public interface ILoanApplication : ILoanApplicationBase 
    { 
     Guid? Id { get; set; } 

     List<ILoanApplicationDebt> LoanApplicationDebts { get; set; } 

     ILoanApplicationStatus LoanApplicationStatus { get; set; } 

     IReadOnlyCollection<IBusinessBorrower> BusinessBorrowers { get; set; } 
    } 
} 

namespace App2.Core.Interfaces 
{ 
    public interface ILoanApplication : IDomainModel, ILoanApplicationBase 
    { 
     int? Id { get; set; } 

     IReadOnlyCollection<ILoanApplicationDebt> LoanApplicationDebts { get; set; } 

     ILoanApplicationStatus LoanApplicationStatus { get; set; } 

     IReadOnlyCollection<IBusinessBorrower> BusinessBorrowers { get; set; } 
    } 
} 

Объекты

namespace App1.Domain 
{ 
    [Serializable] 
    public class LoanApplication : ILoanApplication 
    { 
     public Guid? Id { get; set; } 

     public List<ILoanApplicationDebt> LoanApplicationDebts { get; set; } 

     public LoanApplicationStatus LoanApplicationStatus { get; set; } 

     public IReadOnlyCollection<IBusinessBorrower> BusinessBorrowers { get; set; } 

    } 
} 

namespace App2.Domain 
{ 
    [Serializable] 
    public class LoanApplication : ILoanApplication 
    { 
     public override int? Id { get; set; } 

     public int? LoanApplicationStatusId { get; set; } 

     public virtual LoanApplicationStatus LoanApplicationStatus { get; set; } 

     ILoanApplicationStatus ILoanApplication.LoanApplicationStatus 
     { 
      get 
      { 
       return (ILoanApplicationStatus)LoanApplicationStatus; 
      } 
      set 
      { 
       LoanApplicationStatus = (LoanApplicationStatus)value; 
      } 
     } 

     public virtual ICollection<LoanApplicationDebt> LoanApplicationDebts { get; set; } 

     IReadOnlyCollection<ILoanApplicationDebt> ILoanApplication.LoanApplicationDebts 
     { 
      get 
      { 
       List<ILoanApplicationDebt> loanApplicationDebts = new List<ILoanApplicationDebt>(); 
       foreach (ILoanApplicationDebt loanApplicationDebt in this.LoanApplicationDebts) 
       { 
        loanApplicationDebts.Add(loanApplicationDebt); 
       } 
       return loanApplicationDebts; 
      } 
      set 
      { 
       foreach (var item in value) 
       { 
        this.LoanApplicationDebts.Add((LoanApplicationDebt)item); 
       } 
      } 
     } 

     public ICollection<BusinessBorrower> BusinessBorrowers { get; set; } 

     IReadOnlyCollection<IBusinessBorrower> ILoanApplication.BusinessBorrowers 
     { 
      get 
      { 
       List<IBusinessBorrower> businessBorrowers = new List<IBusinessBorrower>(); 
       foreach(BusinessBorrower businessBorrower in BusinessBorrowers) 
       { 
        businessBorrowers.Add((IBusinessBorrower)businessBorrower); 
       } 
       return new ReadOnlyCollection<IBusinessBorrower>(businessBorrowers); 

      } 
      set 
      { 

       foreach (IBusinessBorrower businessBorrower in value) 
       { 
        BusinessBorrowers.Add((BusinessBorrower)businessBorrower); 
       } 
      } 
     } 
    } 
} 

Моя цель заключается в использовании Automapper скопировать общий свойства между двумя версиями LoanApplication. У меня есть следующие работы:

Mapper.Initialize(cfg => cfg.CreateMap<App1.Domain.LoanApplication, App2.Domain.LoanApplication>() 
    .ForMember(x => x.Id, opt => opt.Ignore()) 
    .ForMember(x => x.LoanApplicationStatus, opt => opt.Ignore()) 
    .ForMember(x => x.BusinessBorrowers, opt => opt.Ignore()) 
    .ForMember(x => x.LoanApplicationDebts, opt => opt.Ignore())); 

app2LoanApplication = Mapper.Map<LoanApplication>(app1LoanApplication); 

Это копирует все столбцы более правильно, но я все равно придется вручную обновить игнорированные свойства.

Типы идентификаторов разные, поэтому я всегда хочу игнорировать. Но хотелось бы знать, как я могу также сопоставить LoanApplicationStatus, BusinessBorrowers и LoanApplicationDebts. Я не размещал эти определения для сокращения пространства, но, как и LoanApplicaiton, версия App1 использует Guid и App2 использует Int для идентификаторов. Каждая версия имеет один и тот же базовый класс, но добавлено несколько разных столбцов.

ответ

0

я понял это, мне нужно, чтобы добавить дополнительные отображения для каждого объекта:

Mapper.Initialize(cfg => 
{ 
    cfg.CreateMap<App1.Domain.LoanApplication, App2.Domain.LoanApplication>() 
     .ForMember(x => x.Id, opt => opt.Ignore()) 

    cfg.CreateMap<App1.Domain.BusinessBorrower, App2.Domain.BusinessBorrower>() 
     .ForMember(x => x.Id, opt => opt.Ignore()) 

    cfg.CreateMap<App1.Domain.LoanApplicationDebt, App2.Domain.LoanApplicationDebt>() 
     .ForMember(x => x.Id, opt => opt.Ignore()); 
});