2016-10-06 7 views
1

私はCustomerInvoiceというクラスを含むレガシーアプリケーションを持っています。私はこれらの項目をフレンドリーな名前よりも少ないデータベーステーブルに関連付ける必要があります(たとえば、CUSTOMER_INV_HEADCUST_INV_LINESCUST_INV_POSTSなど)。異なる名前のObject to Objectsマッパー

最初に内部名のインターフェイスを継承し、ゲッターとセッターを使用してそれぞれのテーブルに正しいデータを配置しようとしましたが、ロジックがアプリケーションの間違ったレイヤーに存在し、パブリックは望ましくない - メンテナンスの面を気にしないでください!

私は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

あなたが別の名前でプロパティをマッピングすることができますけれどもautomapperと:http://stackoverflow.com/questions/14777601/how-to-specify-mapping-rule-when-names-of-properties-differ – thumbmunkeys

+1

完璧!ありがとう! –

答えて

0

属性をクラスプロパティに追加して、基になるデータベース名を付けることができます。これは、フレームワークXMLシリアライザがとるアプローチです。その後、リフレクションを介してクラスのプロパティからデータベース名属性を抽出するための "特別なメソッド"が1つだけ必要です。次の例では、プロパティ名のオーバーライドをXML要素名でリンクしています。独自のカスタム属性を使用して、データベースのマッピング可能なプロパティに対して同じことを実行できます。

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

関連する問題