Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有npgsql的实体框架赢得';不接受货币数据类型_C#_.net_Entity Framework_Npgsql_Ef Postgresql - Fatal编程技术网

C# 具有npgsql的实体框架赢得';不接受货币数据类型

C# 具有npgsql的实体框架赢得';不接受货币数据类型,c#,.net,entity-framework,npgsql,ef-postgresql,C#,.net,Entity Framework,Npgsql,Ef Postgresql,我正在使用Entity Framework 5和PostgreSQL DB创建一个.NET C#应用程序。我使用2.0.12作为数据提供者和数据库优先的方法 首先,我创建了模型文件(csdl、ssdl、mdl)和对象层,使用postgresql数据库的连接字符串作为参数 执行其工作时,edmgen会显示警告: 警告6005:不支持数据类型“money”,表“tablename”中的“amount”列已被排除 然后一切正常,只是该列不包括在模型中。 当然,我对此不满意,因为我需要这个专栏。 我不应

我正在使用Entity Framework 5和PostgreSQL DB创建一个.NET C#应用程序。我使用2.0.12作为数据提供者和数据库优先的方法

首先,我创建了模型文件(csdl、ssdl、mdl)和对象层,使用postgresql数据库的连接字符串作为参数

执行其工作时,edmgen会显示警告:

警告6005:不支持数据类型“money”,表“tablename”中的“amount”列已被排除

然后一切正常,只是该列不包括在模型中。 当然,我对此不满意,因为我需要这个专栏。 我不应该修改数据库结构

因此,我所做的是手动修改模型文件-分别为CSDL、SSDL和MDL:


我还通过添加此属性编辑了ObjectLayer,就像此表中的任何其他属性一样

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

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

那是谁的错?EF?npgsql?埃德根

我在上找到了一些内容,但更改为数字对我没有帮助。 表示money是受支持的类型


我怎样才能使这件事与money type column一起工作?

简单的答案是切换到
NUMERIC
,因为PostgreSQL上的money type具有令人麻木的gotchas数量,而且速度相对较慢。例如,使用的货币取决于本地,这意味着如果您更改区域设置,它可能会突然从100美元(即100.00美元)变为100欧元,或100英镑、100日元等


我写的是会计软件,而货币类型远远不能用于此,我建议只使用数字。

我仍然不知道哪里出了问题。我注意到edmgen不支持任何自定义类型。我仍然需要弄清楚在Npgsql中是否/需要做什么来支持它。但是消息看起来很有希望,因为它说应该使用名称空间或别名限定该类型。因此,这可能只是一个配置问题。
<Property Name="amount" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
<Property Name="amount" Type="money" Nullable="false" />
<ScalarProperty Name="amount" ColumnName="amount" />