为什么pgProvider会抛出异常?

时间:2015-10-02 01:28:00

标签: c# postgresql asp.net-mvc-4 membership-provider custom-membershipprovider

我试图使用pgProvider作为迁移到Postgresql以获得在.NET MVC4 Web应用程序中工作的成员资格的一部分,但是我一直遇到以下错误:

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

到目前为止,我已根据建议设置了web.config,并确认提供程序已使用.NET Reflector成功连接到数据库。我已将问题缩小到pgProvider中DDLManager.cs文件中的ValidateVersion()函数。

基本上正在发生的事情是pgProvider正在尝试检查它是否应该自动创建成员资格表(通过检查表是否已经存在)。但是,它的执行方式是运行此查询:

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

然后尝试将结果解析为int,从int.TryParse()返回bool作为表是否存在的指示符。但是因为返回的结果是0而不是NULL(我假设是pgProvider所期望的,如果没有表),它总是求值为true ...因为显然0是一个int。因此,它认为所有表都存在并尝试在"版本的查询上运行"尚未创建的表格。

所以我不确定我的数据库返回0时是否存在问题,如果它应该返回NULL,或者pgProvider实际上没有查看返回的内容是一个问题。我应该从哪里开始?

1 个答案:

答案 0 :(得分:0)

我使用pgprovider 1.8版,遇到同样的问题。

解决方案是在pgprovider运行良好之前手动执行一些查询。您可以检查DDLManager.cs函数ValidateVersion,为类似顺序的区域v1.1,v1.2和v1.3手动执行查询。查询文件位于文件夹pgProvider / ddl。

执行查询后,pgprovider可以自行运行v1.4区域直到v1.7。

https://github.com/jholovacs/pgprovider