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.
答案 0 :(得分:0)
这是有效的,但是指出了LoadTables()的一些固有问题,因为当PostgreSQL数据库有多个模式时它适用于Npgsql - 我在某处猜测名称冲突..
我回到我的PostgreSQL数据库并删除了除我需要的每个模式之外的所有模式。现在正确运行Database.tt模板并快速生成POCO而没有错误。
此外,以前版本的PetaPoco对多个模式没有任何问题 - 它是最新版本似乎有困难。