我正在使用Entity Framework 5和PostgreSQL DB创建一个.NET C#应用程序。我使用npgsql 2.0.12作为数据提供程序和数据库优先方法。
首先,我使用edmgen创建模型文件(csdl,ssdl,mdl)和对象层,并将连接字符串作为参数添加到postgresql db。
edmgen在完成工作时会显示警告:
警告6005:不支持数据类型“money”,表'tablename'中的列'amount'已被排除。
然后一切正常,只是该列未包含在模型中。 当然,我对此并不满意,因为我需要这个专栏。 我不应该修改数据库结构。
所以,我做的是手动修改模型文件 - 分别是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表示钱是受支持的类型。
如何才能使这款产品与货币型列配合使用?
答案 0 :(得分:1)
简单的答案是切换到NUMERIC
,因为PostgreSQL上的钱类型有一个令人头脑麻木的问题并且相对较慢。例如,使用的货币是本地相关的,这意味着如果您更改区域设置,它可以突然从100意味着100.00美元到100欧元,或100英镑,100日元等。
我在编写会计软件,而且钱类型远不可用,我建议只使用NUMERIC。