我试图将Firebird与EF6一起设置为一个简单的应用程序的嵌入式服务器我写作但是还没有能够让它工作。我有一个CLI项目,它是应用程序和DAL项目,它是数据库。我将NuGet包添加到两者并使用简单实体创建了DbContext,并成功创建了初始迁移,但在尝试运行update-database
以执行迁移时,我在包管理器控制台中收到此错误:
System.Runtime.Serialization.SerializationException: Type is not resolved for member 'FirebirdSql.Data.FirebirdClient.FbException,FirebirdSql.Data.FirebirdClient, Version=4.10.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c'.
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Type is not resolved for member 'FirebirdSql.Data.FirebirdClient.FbException,FirebirdSql.Data.FirebirdClient, Version=4.10.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c'.
实际上我只是注意到现在没有任何作用...如果我删除了我的迁移并尝试重新创建它,我就会收到此错误。我以前能够启用迁移并创建一个,但现在我无法进行迁移。奇异。
我的所有项目都针对.NET 4.5.2,它们都具有相同的软件包版本。我的解决方案/项目路径中没有空格或符号或奇怪的字符。我已经尝试将我的应用项目用作启动项目和DAL项目,并没有起到作用。
我的packages.config
:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net452" />
<package id="EntityFramework.Firebird" version="4.10.0.0" targetFramework="net452" />
<package id="FirebirdSql.Data.FirebirdClient" version="4.10.0.0" targetFramework="net452" />
</packages>
我的App.config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<connectionStrings>
<add name="DAL.DbContext" providerName="FirebirdSql.Data.FirebirdClient" connectionString="User=SYSDBA;Password=masterkey;Database=SampleDatabase.fdb;DataSource=localhost;Port=3050;Dialect=3;Charset=NONE;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=1;" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="FirebirdSql.Data.EntityFramework6.FbConnectionFactory, EntityFramework.Firebird" />
<providers>
<!--<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />-->
<provider invariantName="FirebirdSql.Data.FirebirdClient" type="FirebirdSql.Data.EntityFramework6.FbProviderServices, EntityFramework.Firebird" />
</providers>
</entityFramework>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.data>
<DbProviderFactories>
<remove invariant="FirebirdSql.Data.FirebirdClient" />
<add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient" />
</DbProviderFactories>
</system.data>
</configuration>
我刚在网上找到的连接字符串可能有误,但我找不到任何文档...
我以前用SqlServer完成了代码优先EF几十次,之前从未遇到过这个问题,但是这个应用程序没有真正的服务器可以点击。不幸的是,这似乎是一个比Firebird或EF更普遍的问题,但我不确定在哪里看这一点。
答案 0 :(得分:3)
我有同样的问题,并且能够在前一个答案的帮助下弄清楚到底发生了什么。这是一个已知的错误,他们有6.2的修复。例外是隐藏了一个更深层次的问题,如果没有适当的堆栈跟踪可能很难知道。解决方法是将您的Entity Framework升级到最新的6.2版预发布版本,然后查看真正的问题然后恢复到当前版本,在我的情况下是6.1.3
Update-Database
此时您应该看到错误的详细错误消息,它应该让您更好地了解解决问题所需的操作。在我的情况下,访问文件存在问题,Visual Studio需要以管理员身份运行。
解决问题后,您可以撤消对实体框架版本的更改,也可以按照上述步骤操作,但将版本更新为您使用的旧版本。
答案 1 :(得分:2)
这是EF中的known issue。它已在尚未发布的版本6.2中修复。