EF6 Migrazioni con NPGSQL Get DbProviderservices Error
-
21-12-2019 - |
Domanda
Sto cercando di testare il framework dell'entità 6 migrazioni con NPGSQL 2.0.14.3 per completare il supporto della mia libreria di OpenSource PostgreSQLMigrationsQLGenerator che consente di utilizzare EF MIGRAZIONI con PostgreSQL.
La classe di test che sto scrivendo è questo ( clicca qui per GitHub Page ):
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations;
using System.Data.Entity;
using System.Data.Entity.Migrations.Sql;
using Npgsql;
using NUnit.Framework;
namespace EntityFramework.PostgreSql.Test.IntegrationTests
{
[TestFixture]
public class PostgreSqlMigrationSqlGeneretorHistoryTest
{
private const string ConnectionString = "Server=127.0.0.1;Port=5432;Database=testEF6;User Id=postgres;Password=p0o9i8u7y6;CommandTimeout=20;Preload Reader = true;";
private const string ProviderName = "Npgsql";
[Test]
public void GenerateInsertHistoryOperation()
{
var migrator = new DbMigrator(new LocalMigrationConfiguration());
migrator.Update();
}
public class LocalMigrationConfiguration : DbMigrationsConfiguration<LocalPgContext>
{
public LocalMigrationConfiguration()
{
AutomaticMigrationDataLossAllowed = true;
AutomaticMigrationsEnabled = false;
SetSqlGenerator("Npgsql", new PostgreSqlMigrationSqlGenerator());
MigrationsNamespace = "EntityFramework.PostgreSql.Test.IntegrationTests.Migrations";
MigrationsAssembly = typeof (LocalPgContext).Assembly;
TargetDatabase = new DbConnectionInfo(ConnectionString, ProviderName);
}
}
public class LocalPgContext : DbContext//, IDbProviderFactoryResolver, IDbConnectionFactory
{/*
public DbProviderFactory ResolveProviderFactory(DbConnection connection)
{
return DbProviderFactories.GetFactory("Npgsql");
}
public DbConnection CreateConnection(string nameOrConnectionString)
{
return new NpgsqlConnection(nameOrConnectionString);
}*/
}
/*
public class LocalConfiguration : DbConfiguration
{
public LocalConfiguration()
{
// can't set this cos NpgsqlServices is internal
SetProviderServices(
"Npgsql", provider: NpgsqlServices.Instance
);
}
}
*/
}
}
.
Il metodo di prova GenerateInsertHistoryOperation
non viene inizializzato Inizializza perché ritorna questo errore:
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code
Additional information:
The 'Instance' member of the Entity Framework provider type 'Npgsql.NpgsqlServices, Npgsql, Version=2.0.14.3, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' did not return an object that inherits from 'System.Data.Entity.Core.Common.DbProviderServices'.
Entity Framework providers must inherit from this class and the 'Instance' member must return the singleton instance of the provider.
This may be because the provider does not support Entity Framework 6 or later; see http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
.
Ho aggiunto un file app.confing per impostare il provider ( github link ):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" requirePermission="false" />
</configSections>
<entityFramework>
<providers>
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql" />
</providers>
</entityFramework>
</configuration>
.
A questo punto, non so se NPGSQL 2.0.14.3 non sta ancora supportando EF6 o se mi manca qualcosa sul mio codice.
clicca qui per vederlo su github
Grazie.
Soluzione
Mi piacerebbe vedere il progetto completato come migrazioni postgresql sarebbe molto utile nel mio ultimo progetto che purtroppo utilizza EF 6.
Penso che la versione NPGSQL che ti serve sia l'ultima versione beta, provare a utilizzare questa riga nel Gestore pacchetti per installare la versione EF 6 di NPGSQL
Install-Package Npgsql.EF6 -Pre
.