2013-07-27 34 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。

相关问题