0

我有一个使用 SqlServerCe.3.5 和 EntityFramework 6 的项目。我想将数据库更改为 PostgreSQL,所以我更改了配置

从:

<entityFramework>
   <providers>
       <provider invariantName="System.Data.SqlServerCe.3.5" type="System.Data.Entity.SqlServerCompact.Legacy.SqlCeProviderServices, EntityFramework.SqlServerCompact.Legacy" />
   </providers>
   <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
       <parameters>
           <parameter value="System.Data.SqlServerCe.3.5" />
       </parameters>
   </defaultConnectionFactory>
</entityFramework>
<connectionStrings>
    <add name="Model1Container" connectionString="Data Source=<.. DB.sdf ...>" providerName="System.Data.SqlServerCe.3.5" />
</connectionStrings>
<system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.3.5" />
      <add name="Microsoft SQL Server Compact Data Provider 3.5" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
</system.data>

至:

<entityFramework>
   <providers>
       <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework" />
   </providers>
</entityFramework>
<connectionStrings>
    <add name="Model1Container" connectionString="Server=localhost;<...>" providerName="Npgsql" />
</connectionStrings>
<system.data>
    <DbProviderFactories>
      <remove invariant="Npgsql" />
      <add name="Npgsql Data Provider" invariant="Npgsql" description="Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" />
    </DbProviderFactories>
</system.data>

当我使用新的配置文件运行我的软件时,出现以下错误:

DbMigrator migrator = new DbMigrator(new Migrations.Configuration());
var latestMigration = migrator.GetLocalMigrations().Last();
var charPos = latestMigration.IndexOf("_");
var migrationName = latestMigration.Substring(charPos + 1, latestMigration.Length - charPos - 1);
migrator.Update(migrationName);  // <<< it crashes here!!

例外:

具有不变名称“System.Data.SqlServerCe.3.5”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册,或者无法加载。有关详细信息,请参阅内部异常。在 System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Loader.ThrowOnNonWarningErrors() 在 System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Loader.LoadItems(IEnumerable'1 xmlReaders, IEnumerable'1 sourceFilePaths) 在System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Loader..ctor(IEnumerable'1 xmlReaders, IEnumerable'1 sourceFilePaths, Boolean throwOnError, IDbDependencyResolver resolver) 在 System.Data.Entity.Core.Metadata.Edm.StoreItemCollection。 Init(IEnumerable'1 xmlReaders, IEnumerable'1 filePaths, Boolean throwOnError, IDbDependencyResolver resolver, DbProviderManifest&

我收到此错误消息,但我的 PostgreSQL 数据库是使用 CodeFirst EntityFramework 中定义的所有表创建的。

在中machine.config没有定义 SqlServerCe 或 Npgsql。

是否有可能隐藏的某个地方有我看不到的设置?我对所有配置和项目文件进行了文本搜索,但没有看到任何可能的原因。

4

1 回答 1

2

解决方案!(对于那些有机会遇到同样问题的人)

我最终完全删除了迁移,并从头开始重建。我曾经使用过Enable-Migrations它以某种方式与当前配置相关联。当我现在启用迁移时,它运行没有任何问题。

于 2018-03-20T11:06:04.110 回答