4

我想設置Firebird與EF6作爲我正在寫一個簡單的應用程序的嵌入式服務器,但一直未能得到它的工作。我有一個CLI項目,它是應用程序,DAL項目是數據庫。我加入的NuGet包都和創建一個簡單的實體的DbContext,並創建了一個初始遷移成功,但是當試圖運行update-database執行我的包管理器控制檯收到此錯誤遷移:新的嵌入式Firebird,代碼優先,EF6項目結果SerializationException

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幾十次,之前從未遇到過這個問題,但這個應用程序不會有一個真正的服務器擊中。不幸的是,這似乎是比Firebird或EF更普遍的問題,但我不確定哪裏可以看到這一點。

回答

2

這是EF中的known issue。它在尚未發佈的6.2版本中得到修復。

3

我有這個相同的確切問題,並能夠弄清楚在前一個答案的幫助下到底發生了什麼。這是一個已知的bug,他們有一個6.2的修復。如果沒有適當的堆棧跟蹤,這個例外就隱藏了一個更深的難題。一種解決方法是你的實體框架升級到最新的6.2預發行版本,看看真正的問題,然後恢復到你當前的構建,在我的情況下,它是6.1.3

  1. 獲取最新的簽名版本來自實體框架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需要以管理員身份運行。

解決該問題後,您可以撤消對實體框架版本所做的更改,也可以按照上述步驟更新您的版本以使用以前的版本。