具有不同名称的Object to Objects映射器

时间:2016-10-06 11:41:02

标签: c# mapping

我有一个遗留应用程序,其中包含一个名为CustomerInvoice的类。我需要将这些项目与名称不够友好的数据库表相关联(例如CUSTOMER_INV_HEADCUST_INV_LINESCUST_INV_POSTS以及其他许多其他名称。

第一次尝试是继承内部名称的接口,然后使用getter和setter将正确的数据放在各自的表中,这里的问题是逻辑存在于我的应用程序的错误层,并且都需要公开这是不可取的 - 没关系维护方面!

我已经阅读了很多关于ORM的内容,并认为AutoMapper可以正常工作,但我见过的大多数示例都证明了名称两边的名称相同。我还回顾了类似的NHibernate。

我需要做这样的事情:

public class CustomerInvoice 
{
    public string id; // lives in CUSTOMER_INV_HEAD
    public decimal netTotal; // lives in CUSTOMER_INV_HEAD called NET_INV_TOTAL
    public IEnumerable<InvoiceLine> Lines; // collection of CUST_INV_LINES but including the id
}

所以我需要做的就是说......

List<CUST_INV_LINES> l = Map<CustomerInvoice.Lines, CUST_INV_LINES>();

但是,如何在不用特殊方法手工编码关系的情况下,以一种聪明,可维护的方式定义这种关系?

1 个答案:

答案 0 :(得分:0)

您可以将属性添加到类属性以提供其基础数据库名称。这是框架XML序列化程序采用的方法。然后,您只需要一个“特殊方法”,通过反射从类的属性中提取数据库名称属性。请注意以下示例链接使用XML元素名称覆盖属性名称 - 您可以使用自己的自定义属性对数据库可映射属性执行相同的操作。

https://msdn.microsoft.com/en-us/library/2baksw0z(v=vs.110).aspx