2013-06-03 64 views
1

我試圖重構一個現有的代碼庫來使用POCO EF。目前它使用EntityObject s,但是有自定義代碼來將映射對象「拼合」爲POCO,即對於所有映射類別,目前有兩個相關對象,一個POCO調用MyClass,一個調用,調用MyClassEF,它具有帶簽名的單個附加方法MyClass Flatten()。我知道這看起來很可怕,但它允許將數據庫中的小數類型映射到模型中的雙精度類型,因爲轉換可以在Flatten()方法中進行。如何將小數映射爲EntityFramework POCO的雙倍映射?

雙重類型在代碼中使用,因爲它們在執行分析計算時速度相當快,因此十進制類型可能在數據庫中使用,因爲它們在當時似乎是個好主意,並且以前的手動滾動的ORM沒有EF所做的類型映射限制。不幸的是,簡單地改變數據庫中的數據類型現在是不切實際的,因爲有太多的應用程序使用它(儘管大多數應用程序仍然將類型轉換爲double類型,但他們仍然認爲它是db中的十進制數)。

所以,目前我看修改我的模型類有這樣的事情:

private double _myDouble; 
public double MyDouble { get { return _myDouble; } set { _myDouble = value; } 
public decimal MyDouble_asDecimal { 
    get { return Convert.ToDecimal(_myDouble); } 
    set { _myDouble = Convert.ToDouble(value); } 
} 

...這似乎相當不愉快。我錯過了一個非常明顯的更好的方式來做到這一點?

回答

0

約一個簡單的擴展方法(S)是什麼:

public static class MyExtension 
{ 
    public static decimal ToDecimal(this double d) 
    { 
     return Convert.ToDecimal(d); 
    } 

    public static double ToDouble(this decimal d) 
    { 
     return Convert.ToDouble(d); 
    } 
} 

所以,你的模型將保持不變,扁平化的方法只使用customer.DoubleValueProperty.ToDecimal();

不知道這是否是你想要的:-)

另外,如果你正在使用映射和展平,我建議看看automapper。帶走了很多痛苦。

+0

我想你誤會了。我想取消映射步驟,只使用POCO EF,但是我想這樣做,而不必使用每個小數類型包含的難看的代碼。 – adhocgeek