C# 具有npgsql的实体框架赢得';不接受货币数据类型
我正在使用Entity Framework 5和PostgreSQL DB创建一个.NET C#应用程序。我使用2.0.12作为数据提供者和数据库优先的方法 首先,我创建了模型文件(csdl、ssdl、mdl)和对象层,使用postgresql数据库的连接字符串作为参数 执行其工作时,edmgen会显示警告: 警告6005:不支持数据类型“money”,表“tablename”中的“amount”列已被排除 然后一切正常,只是该列不包括在模型中。 当然,我对此不满意,因为我需要这个专栏。 我不应该修改数据库结构 因此,我所做的是手动修改模型文件-分别为CSDL、SSDL和MDL: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”列已被排除 然后一切正常,只是该列不包括在模型中。 当然,我对此不满意,因为我需要这个专栏。 我不应
我还通过添加此属性编辑了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" />