2

我想用Npgsql 2.0.14.3測試實體框架6遷移來完成我的開源PostgreSqlMigrationSqlGenerator庫的支持,允許在Postgresql中使用EF遷移。EF6遷移與Npgsql獲取DbProviderServices錯誤

測試類我寫是這樣(click here for 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 
        ); 
      } 

     } 
     */ 
    } 
} 

測試方法GenerateInsertHistoryOperation沒有得到初始化becouse它返回此錯誤:

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. 

添加的應用程序.confing文件來設置提供程序(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> 

在這一點上,我不知道Npgsql 2.0.14.3是不是仍然支持EF6,或者如果我在代碼上丟失了某些東西。

Click here to see it on github

謝謝。

回答

2

我很想看到已完成的項目爲PostgreSQL的遷移將是我最新的項目是非常有用的這家飯店使用EF 6.

我認爲你需要的版本Npgsql的是最新的測試版本,嘗試使用這個在包管理器中安裝npgsql的EF 6版本

Install-Package Npgsql.EF6 -Pre 
+0

它的工作原理!現在我發現了其他問題,但我希望在很短的時間內順利發佈。 –

+0

太棒了!很高興聽到我能幫助你。 –