2013-07-27 39 views
0

我使用實體框架5和PostgreSQL數據庫創建一個.NET C#應用程序。我使用npgsql 2.0.12作爲數據提供者和數據庫優先的方法。實體框架與npgsql不會接受錢數據類型

首先,我創建了模型文件(csdl,ssdl,mdl)和使用edmgen的連接字符串作爲參數的postgresql db的對象層。

的edmgen顯示做時警告它的工作:

警告6005:數據類型「錢」不被支持,在表「表名」列「金額」被排除在外。

然後它一切正常,只是該列不包含在模型中。 當然,我不滿意,因爲我需要這個專欄。 我不應該修改數據庫結構。

所以,我所做的是我手工修改了模型文件 - CSDL,SSDL,MDL分別爲:

<Property Name="amount" Type="Decimal" Nullable="false" Precision="19" Scale="4" /> 
<Property Name="amount" Type="money" Nullable="false" /> 
<ScalarProperty Name="amount" ColumnName="amount" /> 

我還編輯了ObjectLayer加入這個屬性,就像任何其他的這張桌子。

現在,當我運行應用程序,我得到:指定

模式是無效的。錯誤:Type money沒有使用名稱空間或別名進行限定。只有原始類型可以不受限制地使用。

是誰的錯? EF? Npgsql的? edmgen?

我在pgfoundry.org/forum上發現了一些東西,但改爲數字不能幫助我。 User Manual npgsql表示money是受支持的類型。

如何使這件事情與錢型列工作?

+1

我仍然不知道故障在哪裏。我注意到edmgen不支持任何自定義類型。我仍然需要弄清楚Npgsql中是否需要做什麼來支持它。但是這個消息看起來很有希望,因爲它說這個類型應該用一個名稱空間或別名來限定。所以它可能只是一個配置問題。 –

回答

1

簡單的答案是切換到NUMERIC,因爲PostgreSQL上的資金類型有一個令人頭痛的陷阱數量,並且相對較慢。例如,使用的貨幣是與本地相關的,這意味着如果您更改區域設置,它可以突然從100意味着100.00美元增加到100歐元,或者100英鎊,100日元等。

我寫的會計軟件,錢的類型是遠遠不可用的,我建議只使用NUMERIC。

相關問題