2013-07-27 2 views
0

Я создаю приложение .NET C#, используя Entity Framework 5 и PostgreSQL DB. Я использую npgsql 2.0.12 как поставщик данных и базовый подход к базе данных.Entity Framework с npgsql не принимает тип данных денег

Во-первых, я создал файлы моделей (csdl, ssdl, mdl) и слой объектов, используя edmgen со строкой подключения к параметру postgresql db в качестве параметра.

edmgen показывает предупреждение, когда делает его работу:

предупреждение 6005: Тип данных «деньги» не поддерживается, в столбце «количество» в таблице «TABLENAME» был исключен.

Тогда все работает отлично, только эта колонка не включена в модель. Конечно, я не доволен этим, так как мне нужна эта колонка. Мне не нужно изменять структуру БД.

Итак, что я сделал, я изменил файлы модели вручную - 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 путем добавления этого атрибута, так же как и любые другие в этот стол.

Теперь, когда я запустить приложение я получаю:

Схема Указан недопустимый. Ошибки: деньги типа не квалифицируются с пространством имен или псевдонимом. Только примитивные типы могут использоваться без квалификации.

Чья это вина? EF? npgsql? edmgen?

Я нашел что-то на pgfoundry.org/forum, но изменение на число не помогает. User Manual npgsql указывает, что деньги являются поддерживаемым типом.

Как я могу заставить эту работу работать с колонкой, напечатанной в виде денег?

+1

Я все еще не знаю, где ошибка. Я заметил, что любой пользовательский тип не поддерживается edmgen. Мне все еще нужно выяснить, нужно ли что-то сделать в Npgsql, чтобы поддержать его. Но сообщение выглядит многообещающим, поскольку он говорит, что тип должен быть квалифицирован с пространством имен или псевдонимом. Так что это может быть вопрос конфигурации. –

ответ

1

Простой ответ заключается в том, чтобы перейти на NUMERIC, поскольку тип денег на PostgreSQL имеет ошеломляющее количество ошибок и относительно медленный. Например, используемая валюта зависит от региона, а это означает, что если вы измените локаль, она может внезапно перейти от 100 до 100 евро или 100 фунтов стерлингов, 100 иен или тому подобное.

Я пишу бухгалтерское программное обеспечение, и тип денег пока не используется для этого, я рекомендую просто использовать NUMERIC.

Смежные вопросы