【问题标题】:New embedded Firebird, code first, EF6 project results in SerializationException新嵌入式 Firebird,代码优先,EF6 项目导致 SerializationException
【发布时间】:2016-01-23 04:25:08
【问题描述】:

我正在尝试将带有 EF6 的 Firebird 设置为我正在编写的一个简单应用程序的嵌入式服务器,但无法让它工作。我有一个作为应用程序的 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 更普遍的问题,但我什至不知道在哪里看这一点。

【问题讨论】:

    标签: ef-code-first entity-framework-6 firebird entity-framework-migrations firebird-embedded


    【解决方案1】:

    我遇到了同样的问题,并且能够在上一个答案的帮助下准确地弄清楚发生了什么。这是一个已知的错误,他们对 6.2 进行了修复。例外是隐藏一个更深层次的问题,如果没有适当的堆栈跟踪,可能很难知道。一种解决方法是将您的实体框架升级到最新的 6.2 预发布版本,然后查看真正的问题是什么,然后恢复到您当前的版本,在我的情况下是 6.1.3

    1. 从 Entity Framework 6.2 获取最新的签名版本。您将需要添加 NuGet 存储库 https://www.myget.org/F/aspnetwebstacknightly/ 。此步骤的详细说明可在此处找到:https://github.com/aspnet/EntityFramework6/wiki/Nightly-Builds
    2. 为您的解决方案打开 NuGet 包管理器
    3. 选中 NuGet 包管理器顶部的“预发布”复选框
    4. 在项目选择窗口中选择所有引用实体框架的项目
    5. 在版本下拉列表中选择最新的 6.2 版本并单击“安装”按钮。这将卸载您当前的版本并安装所选的预发布版本
    6. 构建您的解决方案
    7. 打开包管理器控制台并输入命令Update-Database

    此时,您应该会看到详细的错误消息,说明问题所在,它应该让您更好地了解解决问题需要采取的措施。就我而言,访问文件时出现问题,需要以管理员身份运行 Visual Studio。

    解决问题后,您可以撤消对实体框架版本的更改,或者按照上述步骤将您的版本更新到您使用的先前版本。

    【讨论】:

      【解决方案2】:

      这是 EF 中的 known issue。它已在尚未发布的 6.2 中修复。

      【讨论】:

        猜你喜欢
        • 2015-06-04
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多