7

いくつかの条件に基づいて、単一のプロパティを複数のソース プロパティの組み合わせとしてマップする必要がある状況があります。

行き先 :

public class Email
{
    public Email() {
        EmailRecipient = new List<EmailRecipient>();
    }
    public string Subject{get; set;}
    public string Body {get; set;}
    public virtual ICollection<EmailRecipient> EmailRecipient { get; set; } 
}

public class EmailRecipient
{
    public int EmaiId { get; set; }
    public string RecipientEmailAddress { get; set; }
    public int RecipientEmailTypeId { get; set; }
    public virtual Email Email { get; set; }
}

ソース:

public class EmailViewModel
{
    public List<EmailRecipientViewModel> To { get; set; }
    public List<EmailRecipientViewModel> Cc { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
}

public class EmailRecipientViewModel
{
    public string RecipientEmailAddress { get; set; }
}

私が欲しいMapper.Map<EmailViewModel,Email>()

ここで、 my をとEmail.EmailRecipientの組み合わせとしてマッピングしたいと思います。ただし条件は、Toは1 、 Ccは2となりますEmailViewModel.ToEmailViewModel.CcEmail.EmailRecipient.RecipientEmailTypeId

私の質問が明確であることを願っています。

4

2 に答える 2

4

私はコンバーターの大反対者です。主に、プロジェクトの他の人にとっては、マッピング呼び出しの後に「魔法のように」物事が起こるからです。

これを処理する簡単な方法は、ビューモデルの他のプロパティを必要な書式に変換するメソッドとしてプロパティを実装することです。例:

public class EmailViewModel
{
    public ICollection<EmailRecipient> EmailRecipient { 
        get {
             return To.Union(Cc);
        } 
    }
    public List<EmailRecipientViewModel> To { get; set; }
    public List<EmailRecipientViewModel> Cc { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
}

automapper は、EmailRecipient プロパティから EmailRecipient プロパティに自動的にマップするようになりました。誰かがそれがどのように起こるかを理解しようとしている場合は、viewmodel を見るだけで済みます。

于 2015-07-07T19:41:27.173 に答える