EF6 Миграции с Npgsql получават грешка DbProviderServices

Опитвам се да тествам миграциите на Entity Framework 6 с Npgsql 2.0.14.3, за да завърша поддръжката на моята библиотека PostgreSqlMigrationSqlGenerator с отворен код, която позволява използването на EF миграции с Postgresql.

The test class I'm writing is this (щракнете тук за страница в github):

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
                    );
            }

        }
        */
    }
}

Тестовият метод GenerateInsertHistoryOperation не се инициализира, защото връща тази грешка:

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.

Добавих файл App.confing, за да задам доставчика (github връзка):

    <?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>

На този етап не знам дали Npgsql 2.0.14.3 все още не поддържа EF6 или пропускам нещо в кода си.

Щракнете тук, за да го видите в github

Благодаря.


person Darion Badlydone    schedule 09.01.2014    source източник


Отговори (1)


Бих искал да видя завършения проект, тъй като миграциите на PostgreSQL биха били много полезни в последния ми проект, който за съжаление използва EF 6.

Мисля, че npgsql версията, от която се нуждаете, е най-новата бета версия, опитайте се да използвате този ред в пакетния мениджър, за да инсталирате EF 6 версията на npgsql

Install-Package Npgsql.EF6 -Pre
person Dominic Lacaille    schedule 12.02.2014
comment
Работи! Сега откривам други проблеми, но се надявам да получа добре работеща версия след малко време. - person Darion Badlydone; 14.02.2014
comment
Страхотен! Радвам се да чуя, че мога да ти помогна с това. - person Dominic Lacaille; 14.02.2014