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