PetaPoco POCO生成失败,序列包含更多然后一个匹配元素

时间:2016-12-18 20:44:02

标签: postgresql npgsql petapoco

PostgreSQL 9.5 Npgsql 3.1.9

我一直在使用PetaPoco和Npgsql来生成带有Database.tt的POCO。一切都运作良好,直到今天。在PostgreSQL中重新构建模式后,现在运行Database.tt会出现错误:

  

//此文件由PetaPoco T4模板自动生成

     

//不要直接对此文件进行更改 - 而是编辑模板

     

//以下连接设置用于生成此文件

     

//连接字符串名称:localconnection

     

//提供者:Npgsql

     

//连接字符串:Server=127.0.0.1;Port=5432;Database=chaos;User Id=postgres;password=**zapped**;Searchpath=nova

     

//架构:``

     

//包括观点:False

     

//

     

//无法读取数据库架构 - 序列包含多个匹配元素

我在Google中找不到任何可以解决的问题: 这意味着什么(对于PetaPoco),它为什么会发生,我该如何修复它?

TIA

编辑#1:如果它在步进T4模板时有助于任何_factory类型 解析为SQL Server CE - 不是NpgsqlFactory - 尽管有正确的连接字符串。

_factory.GetType().Name == "SqlCeProviderFactory"

编辑#2:通过放置

重写PetaPoco.Core.ttinclude中的LoadTables()
else if (_factory.GetType().Name == "NpgsqlFactory")

编辑#3:现在回到PetaPoco v 5.1.211,仍然是同样的错误???

问题似乎出现在LoadTables()中,Npgsql最初将加载每个模式的每个表 - 即使搜索路径中列出了特定的模式,但是(为什么?)它会在生成之前将表计数清零表格。

任何人都可以帮忙吗?

Npgsql是从Nuget安装的,就像PetaPoco一样。

作为参考,在重新创建和重命名模式之前,所有工作都很顺利。

app.config是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
  </startup>
  <system.data>
    <DbProviderFactories>
      <remove invariant="Npgsql" />
      <add name="Npgsql Data Provider" invariant="Npgsql" support="FF"
         description=".Net Framework Data Provider for Postgresql Server"
         type="Npgsql.NpgsqlFactory, Npgsql" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <clear/>
    <add name="localconnection" providerName="Npgsql"
       connectionString="Server=127.0.0.1;Port=5432;Database=chaos;User Id=postgres;Password=password;Searchpath=nova"/>
  </connectionStrings>

Database.tt设置为:

// Settings
ConnectionStringName = "localconnection";           // Uses last connection string in config if not specified
Namespace = "chaos";
RepoName = "chaosDB";
GenerateOperations = true;
GeneratePocos = true;
GenerateCommon = true;
ClassPrefix = "";
ClassSuffix = "";
TrackModifiedColumns = false;
ExplicitColumns = true;
ExcludePrefix = new string[] {}; // Exclude tables by prefix.

1 个答案:

答案 0 :(得分:0)

这是有效的,但是指出了LoadTables()的一些固有问题,因为当PostgreSQL数据库有多个模式时它适用于Npgsql - 我在某处猜测名称冲突..

我回到我的PostgreSQL数据库并删除了除我需要的每个模式之外的所有模式。现在正确运行Database.tt模板并快速生成POCO而没有错误。

此外,以前版本的PetaPoco对多个模式没有任何问题 - 它是最新版本似乎有困难。