使用AutoMap扩展类

时间:2013-12-23 06:05:07

标签: c# automapper

我必须将一组数据从一个数据库导入到另一个数据库,并且模式稍有不同,我正在考虑使用AutoMap。我可以写一堆SQL脚本,但我已经在EF中有两个数据库,我想学习AutoMap ...

虽然许多类都很相似,但我遇到的问题是结构真的不同。目标模型设计有多个类层。我需要扩展而不是扁平化。

目标类具有以下属性:

public class Account
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ContactInfo Location { get; set; }
    public List<Policy> Policies { get; set; }
}

public class ContactInfo 
{
    public int Id { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public State State { get; set; }
    public string Zip { get; set; }
    public string EMail { get; set; }
    public List<Phone> PhoneNumbers { get; set; }        
}

public class Phone 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Number { get; set; }        
}

public class Policy 
{
    public int Id { get; set; }
    public PolicyNumber PolicyNumber { get; set; }
    public List<Transaction> Transactions { get; set; }
}

然而,源表相对扁平化。

public partial class Account
{
    public string AccountId { get; set; }
    public string AccountName { get; set; }
    public string PolicyNumber { get; set; }        
}

public partial class Transaction
{
    public int TransactionId { get; set; }
    public int AccountId { get; set; }
    public Nullable<System.DateTime> EffectiveDate { get; set; }
    public string InsuredName { get; set; }
    public string InsuredAddress { get; set; }
    public string InsuredCity { get; set; }
    public string InsuredState { get; set; }
    public string InsuredZip { get; set; }
    public string InsuredPhone { get; set; }
}

我可以创建Map,但我不知道如何告诉AutoMapper将字符串Policy转换为策略对象,然后将其添加到Policies列表中。

Mapper.CreateMap<Source.Account, Destination.Account>();

更糟糕的是,源数据在事务级别上不明确地具有名称和地址信息。在你告诉我AutoMap可能不是最佳解决方案之前,请理解这两个源表是这个数据库中40多个表中的2个,而其他表并不是那么麻烦。

我是否可以配置AutoMap将字符串属性PolicyNumber转换为策略对象并将其添加到目标类的策略列表中?

有关如何将Transaction中的名称和地址信息提取到ContactInfo类并在帐户级别添加它的任何建议?

谢谢。

1 个答案:

答案 0 :(得分:0)

感谢Thomas Weller。自定义值解析器完全按照我的需要处理。