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
謝謝。
它的工作原理!現在我發現了其他問題,但我希望在很短的時間內順利發佈。 –
太棒了!很高興聽到我能幫助你。 –