我有一个使用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!!
例外:
ADO.NET提供程序具有不变名称&#39; System.Data.SqlServerCe.3.5&#39;要么未在计算机或应用程序配置文件中注册,要么无法加载。有关详细信息,请参阅内部异常 在System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Loader.ThrowOnNonWarningErrors() 在System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Loader.LoadItems(IEnumerable&#39; 1 xmlReaders,IEnumerable&#39; 1 sourceFilePaths) 在System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Loader..ctor(IEnumerable&#39; 1 xmlReaders,IEnumerable&#39; 1 sourceFilePaths,Boolean throwOnError,IDbDependencyResolver resolver) 在System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Init(IEnumerable&#39; 1 xmlReaders,IEnumerable&#39; 1文件路径,布尔throwOnError,IDbDependencyResolver解析器,DbProviderManifest&amp; providerManifest,DbProviderFactory&amp; providerFactory,String&amp; providerInvariantName,String&amp; ; providerManifestToken,Memoizer&#39; 2&amp; cachedCTypeFunction) 在System.Data.Entity.Core.Metadata.Edm.StoreItemCollection..ctor(IEnumerable&#39; 1 xmlReaders) 在System.Data.Entity.Utilities.XDocumentExtensions.GetStorageMappingItemCollection(XDocument model,DbProviderInfo&amp; providerInfo) 在System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel,XDocument targetModel,Lazy`1 modificationCommandTreeGenerator,MigrationSqlGenerator migrationSqlGenerator,String sourceModelVersion,String targetModelVersion) 在System.Data.Entity.Migrations.DbMigrator.IsModelOutOfDate(XDocument model,DbMigration lastMigration) 在System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable&#39; 1 pendingMigrations,String targetMigrationId,String lastMigrationId) 在System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable&#39; 1 pendingMigrations,String targetMigrationId,String lastMigrationId) 在System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) 在System.Data.Entity.Migrations.DbMigrator。&lt;&gt; c__DisplayClassc.b__b() 在System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) 在System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) 在System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) 在&lt; ...&gt;
中的DAL.Session.Init()
我收到此错误消息,但我的PostgreSQL数据库是使用我的CodeFirst EntityFramework中定义的所有表创建的。
在machine.config
中没有SqlServerCe,也没有定义Npgsql。
是否有可能隐藏在某处的设置我看不到?我对所有配置和项目文件进行了文本搜索,但我没有看到任何可能的原因。
答案 0 :(得分:1)
解! (对于那些任何机会遇到同样问题的人)
我最终彻底删除了迁移,并从头开始重建。我曾使用Enable-Migrations
以某种方式链接到当前配置。当我现在启用迁移时,它运行没有任何问题。