Getting exception while trying to generate code for PostreSQL table.
Exception message: "Column is null"
Stack trace:
в Npgsql.BackendMessages.DataRowMessage.CheckNotNull()
в Npgsql.NpgsqlDataReader.<ReadColumn>d__102`1.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в System.Threading.Tasks.ValueTask`1.get_Result()
в Npgsql.NpgsqlDataReader.ReadColumn[T](Int32 ordinal)
в Npgsql.NpgsqlDataReader.GetString(Int32 ordinal)
в LinqToDB.DataProvider.PostgreSQL.PostgreSQLSchemaProvider.<>c.<GetProcedures>b__10_1(IDataReader rd)
в LinqToDB.Data.CommandInfo.<ReadEnumerator>d__12`1.MoveNext()
в System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
в System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
в LinqToDB.DataProvider.PostgreSQL.PostgreSQLSchemaProvider.GetProcedures(DataConnection dataConnection)
в LinqToDB.SchemaProvider.SchemaProviderBase.GetSchema(DataConnection dataConnection, GetSchemaOptions options)
в Microsoft.VisualStudio.TextTemplating8443204E240B8147B056110E0E4BC8AB81D321E389036B8A152EFDB7AB6DE831DE8792DA917C4E6F4CF8354E3D567A8FA628BAB978B7BE436622553B7B1613A2.GeneratedTextTransformation.LoadServerMetadata(DataConnection dataConnection) в C:\Users\shdp\.nuget\packages\linq2db.postgresql\2.5.4\build\..\contentFiles\any\any\LinqToDB.Templates\DataModel.ttinclude:строка 103
в Microsoft.VisualStudio.TextTemplating8443204E240B8147B056110E0E4BC8AB81D321E389036B8A152EFDB7AB6DE831DE8792DA917C4E6F4CF8354E3D567A8FA628BAB978B7BE436622553B7B1613A2.GeneratedTextTransformation.LoadMetadata(DataConnection dataConnection) в C:\Users\shdp\.nuget\packages\linq2db.postgresql\2.5.4\build\..\contentFiles\any\any\LinqToDB.Templates\DataModel.ttinclude:строка 414
в Microsoft.VisualStudio.TextTemplating8443204E240B8147B056110E0E4BC8AB81D321E389036B8A152EFDB7AB6DE831DE8792DA917C4E6F4CF8354E3D567A8FA628BAB978B7BE436622553B7B1613A2.GeneratedTextTransformation.LoadPostgreSQLMetadata(String server, String port, String database, String uid, String password) в C:\Users\shdp\.nuget\packages\linq2db.postgresql\2.5.4\build\..\contentFiles\any\any\LinqToDB.Templates\LinqToDB.PostgreSQL.ttinclude:строка 141
в Microsoft.VisualStudio.TextTemplating8443204E240B8147B056110E0E4BC8AB81D321E389036B8A152EFDB7AB6DE831DE8792DA917C4E6F4CF8354E3D567A8FA628BAB978B7BE436622553B7B1613A2.GeneratedTextTransformation.TransformText() в C:\tfs\git\IntegrationApi\IntegrationApi\Data\Identity.tt:строка 9
I've installed postres 11 on dev machine with default settings.
Added one table in database.
SQL script for table:
CREATE TABLE public.grants
(
key character varying COLLATE pg_catalog."default" NOT NULL,
type character varying COLLATE pg_catalog."default",
subject_id character varying COLLATE pg_catalog."default",
client_id character varying COLLATE pg_catalog."default",
creation_time timestamp without time zone,
expiration timestamp without time zone,
data character varying COLLATE pg_catalog."default",
CONSTRAINT grants_pkey PRIMARY KEY (key)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.grants
OWNER to postgres;
Created new ASP .Net Core 2.1 application.
Added reference to linq2db, linq2db.PostgreSQL, linq2db.t4models.
Added new Identity.tt file in project with this code:
<#@ template language="C#" debug="True" hostSpecific="True" #>
<#@ output extension=".generated.cs" #>
<#@ include file="$(LinqToDBT4PostgreSQLTemplatesDirectory)LinqToDB.PostgreSQL.Tools.ttinclude" #>
<#@ include file="$(LinqToDBT4PostgreSQLTemplatesDirectory)PluralizationService.ttinclude" #>
<# //@ include file="$(ProjectDir)LinqToDB.Templates\LinqToDB.PostgreSQL.Tools.ttinclude" #>
<# //@ include file="$(ProjectDir)LinqToDB.Templates\PluralizationService.ttinclude" #>
<#
NamespaceName = "Data.Identity";
LoadPostgreSQLMetadata("localhost", "5432", "postgres", "postgres", "postgres");
GenerateConstructors = false;
GenerateModel();
#>
Saved, got an exception.
linq2db version: 2.5.4 (all packages)
Database Server: PostgreSQL 11.1
Database Provider: Npgsql 3.2.5
Operating system: Windows 10 Pro
Framework version: .NET Core 2.1
@shnipov, looks like there is something that we have not handled with postgres,
If stored procs are not relevant for you can disable them before loading data model.
GetSchemaOptions.GetProcedures = false;
We will fix that in upcoming release.
@MaceWindu, can we do something here in general way that will not break model generation? Maybe generate some warning in compilable generated code.
@sdanyliv, i don't need stored procedures now, with GetProcedures = false it works perfect.
Thanks for quick reply.
Reproduced with pgsql 11 (other versions work), fix will be in next release
Most helpful comment
@shnipov, looks like there is something that we have not handled with postgres,
If stored procs are not relevant for you can disable them before loading data model.
We will fix that in upcoming release.