0

Я пытаюсь использовать pgProvider в рамках перехода к Postgresql, чтобы получить членство работать в веб-приложение .NET MVC4, однако я продолжаю сталкиваться следующее сообщение об ошибке:Почему pgProvider выбрасывает исключение?

ERROR: 42P01: relation "versions" does not exist 

До сих пор я настроил web.config, как было предложено, и подтвердил, что поставщик успешно подключается к базе данных с помощью .NET Reflector. Я сузил проблему до функции ValidateVersion() в файле DDLManager.cs в pgProvider.

По существу, это pgProvider пытается проверить, должно ли оно автоматически создавать таблицы членства (проверяя, существуют ли таблицы уже). Однако способ, которым он делает это, запустив этот запрос:

select count(*) from pg_tables where schemaname = 'public' and tablename = 'versions'; 

А затем пытается разобрать результат в междунар, возвращая логическое значение из int.TryParse() в качестве индикатора существует ли таблица или нет. Но поскольку возвращаемый результат равен 0 вместо NULL (я предполагаю, что pgProvider ожидает, если нет таблицы), он всегда вычисляет значение true ... потому что, очевидно, 0 является int. Поэтому он считает, что все таблицы существуют и пытается выполнить запрос в таблице «версий», которая не была создана.

Так что я не уверен, что это проблема с моей базой данных, возвращающей 0, когда он должен вернуть NULL, или если это проблема с pgProvider, на самом деле не глядя на то, что возвращается. Куда мне идти дальше?

ответ

0

Я использую версию pgprovider 1.8 и испытываю ту же проблему.

Решение заключается в выполнении некоторых запросов вручную, прежде чем pgprovider сможет работать хорошо. Вы можете проверить функцию DDALManager.cs ValidateVersion, выполнить запрос вручную для областей v1.1, v1.2 и v1.3 с аналогичным порядком. Файлы запросов доступны в папке pgProvider/ddl.

После выполнения запроса pgprovider может запускать себя для области v1.4 до версии v1.7.

https://github.com/jholovacs/pgprovider