使用npgsql的实体框架将不接受money数据类型

时间:2013-07-27 20:32:30

标签: c# .net entity-framework npgsql ef-postgresql

我正在使用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表示钱是受支持的类型。

如何才能使这款产品与货币型列配合使用?

1 个答案:

答案 0 :(得分:1)

简单的答案是切换到NUMERIC,因为PostgreSQL上的钱类型有一个令人头脑麻木的问题并且相对较慢。例如,使用的货币是本地相关的,这意味着如果您更改区域设置,它可以突然从100意味着100.00美元到100欧元,或100英镑,100日元等。

我在编写会计软件,而且钱类型远不可用,我建议只使用NUMERIC。

相关问题