0

我正在使用 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,就像此表中的任何其他属性一样。

现在,当我运行应用程序时,我得到:

指定的架构无效。错误:类型 money 没有使用命名空间或别名进行限定。只有原始类型可以在没有限定的情况下使用。

那是谁的错?英孚?npgsql?edmgen?

我在pgfoundry.org/forum上找到了一些东西,但更改为数字对我没有帮助。 npgsql 的用户手册表明money 是受支持的类型。

我怎样才能使这个东西与货币类型的列一起使用?

4

1 回答 1

2

简单的答案是切换到NUMERIC,因为 PostgreSQL 上的货币类型有很多令人麻木的陷阱,而且速度相对较慢。例如,使用的货币取决于本地,这意味着如果您更改语言环境,它可能会突然从 100(即 100.00 美元)变为 100 欧元,或 100 英镑、100 日元等。

我写了会计软件,而货币类型远不能用于那个,我建议只使用NUMERIC。

于 2013-11-02T12:59:47.023 回答