我必须将一组数据从一个数据库导入到另一个数据库,并且模式稍有不同,我正在考虑使用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类并在帐户级别添加它的任何建议?
谢谢。
答案 0 :(得分:0)
感谢Thomas Weller。自定义值解析器完全按照我的需要处理。