自动映射嵌套模型

本文关键字:模型 嵌套 映射 | 更新日期: 2023-09-27 18:36:41

我正在尝试将模型从提供程序项目自动映射到 wcf 数据协定。但是,它们在原始(嵌套)中都有另一个模型/数据协定。例如:我们有一个客户模型,保存姓名、电话号码、EIN 等信息......但是,每个客户端可以有多个联系人(另一种模型)。我将如何使用流畅的映射在自动映射器中映射它?以下是课程。


数据合约

客户端数据协定

using System.Collections.Generic;
using System.Runtime.Serialization;
namespace DSP.NET.WholeSale.Service.DataContracts
{
    [DataContract]
    public class ClientDataContract
    {
        [DataMember]
        public int? Id { get; set; }
        [DataMember]
        public string FirstName { get; set; }
        [DataMember]
        public string LastName { get; set; }
        [DataMember]
        public string Organization { get; set; }
        [DataMember]
        public string Email { get; set; }
        [DataMember]
        public string UserName { get; set; }
        [DataMember]
        public string Password { get; set; }
        [DataMember]
        public List<ContactDataContract> Contacts { get; set; }
        [DataMember]
        public string WorkPhone { get; set; }
        [DataMember]
        public string HomePhone { get; set; }
        [DataMember]
        public string MobilePhone { get; set; }
        [DataMember]
        public string FaxNumber { get; set; }
        [DataMember]
        public string Language { get; set; }
        [DataMember]
        public string CurrencyCode { get; set; }
        [DataMember]
        public string Notes { get; set; }

        [DataMember]
        public AddressDataContract PrimaryAddress { get; set; }
        //public Address MailingAddress { get { return this.PrimaryAddress; } set { this.PrimaryAddress = value; } }
        //public Address PostalAddress { get { return this.PrimaryAddress; } set { this.PrimaryAddress = value; } }
        [DataMember]
        public AddressDataContract SecondaryAddress { get; set; }
        //public Address BillingAddress { get { return this.SecondaryAddress; } set { this.SecondaryAddress = value; } }
        [DataMember]
        public string VATName { get; set; }
        [DataMember]
        public int? VATNumber { get; set; }
    }
}

联系人数据合约

using System.Runtime.Serialization;
namespace DSP.NET.WholeSale.Service.DataContracts
{
    [DataContract]
    public class ContactDataContract
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public string FirstName { get; set; }
        [DataMember]
        public string LastName { get; set; }
        [DataMember]
        public string Organization { get; set; }
        [DataMember]
        public string Email { get; set; }
        [DataMember]
        public string UserName { get; set; }
        [DataMember]
        public string Password { get; set; }
        [DataMember]
        public string WorkPhone { get; set; }
        [DataMember]
        public string HomePhone { get; set; }
        [DataMember]
        public string MobilePhone { get; set; }
        [DataMember]
        public string FaxNumber { get; set; }
        // TODO: Language Code also
        // TODO: Currency Code
        [DataMember]
        public string Notes { get; set; }

        [DataMember]
        public AddressDataContract PrimaryAddress { get; set; }
        //public Address MailingAddress { get { return this.PrimaryAddress; } set { this.PrimaryAddress = value; } }
        //public Address PostalAddress { get { return this.PrimaryAddress; } set { this.PrimaryAddress = value; } }
        [DataMember]
        public AddressDataContract SecondaryAddress { get; set; }
        //public Address BillingAddress { get { return this.SecondaryAddress; } set { this.SecondaryAddress = value; } }
        [DataMember]
        public string VATName { get; set; }
        [DataMember]
        public int? VATNumber { get; set; }
    }
}

提供程序模型

客户端模型

public class Client
{
    public int? Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Organization { get; set; }
    public string Email { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public List<Contact> Contacts { get; set; }
    public string WorkPhone { get; set; }
    public string HomePhone { get; set; }
    public string MobilePhone { get; set; }
    public string FaxNumber { get; set; }
    public string Language { get; set; }
    public string CurrencyCode { get; set; }
    public string Notes { get; set; }

    public Address PrimaryAddress { get; set; }
    public Address MailingAddress { get { return this.PrimaryAddress; } set { this.PrimaryAddress = value; } }
    public Address PostalAddress { get { return this.PrimaryAddress; } set { this.PrimaryAddress = value; } }
    public Address SecondaryAddress { get; set; }
    public Address BillingAddress { get { return this.SecondaryAddress; } set { this.SecondaryAddress = value; } }
    public string VATName { get; set; }
    public int? VATNumber { get; set; }
}

联系人模型

public class Contact
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Organization { get; set; }
    public string Email { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string WorkPhone { get; set; }
    public string HomePhone { get; set; }
    public string MobilePhone { get; set; }
    public string FaxNumber { get; set; }
    // TODO: Language Code also
    // TODO: Currency Code
    public string Notes { get; set; }

    public Address PrimaryAddress { get; set; }
    public Address MailingAddress { get { return this.PrimaryAddress; } set { this.PrimaryAddress = value; } }
    public Address PostalAddress { get { return this.PrimaryAddress; } set { this.PrimaryAddress = value; } }
    public Address SecondaryAddress { get; set; }
    public Address BillingAddress { get { return this.SecondaryAddress; } set { this.SecondaryAddress = value; } }
    public string VATName { get; set; }
    public int? VATNumber { get; set; }
}

自动映射嵌套模型

您必须为所有使用的类创建映射,以便将Client映射到ClientDataContract

Mapper.CreateMap<Client, ClientDataContract>(); 
Mapper.CreateMap<Contact, ContactDataContract>();
Mapper.CreateMap<Address, AddressDataContract>();

Wiki页面说,创建联系人到联系人数据合同映射就足够了,所有通用集合都将被映射。

相关文章: