4

我有一個ASP.NET應用程序,我想上傳到提供MySQL數據庫的主機。我使用的是Visual Studio 2012,.NET 4.5,Entity Framework 5.0,並且我已經爲Visual Studio 1.0.2安裝了MySQL。我一直在試圖連接到本地的MySQL服務器,但我遇到了一些問題。ASP.NET MVC 4和實體框架5.0中的MySQL連接 - 多個DbProviderFactory

起初,我在我的項目中引用了版本爲6.6.5.0的MySql.DataMySql.Data.Entity。但是,當我試圖做Update-Database在包管理器控制檯,我得到了以下錯誤:

System.DateTime System.Data.Entity.Migrations.Model.InsertHistoryOperation.get_CreatedOn() 

seems要與實體框架5.0和更早版本的連接器/ .NET的一個問題 - MySQL的連接器,用於視覺工作室。由於該過程是發現過程之一,所以我不記得我的項目是如何參考MySql.DataMySql.Data.Entity版本6.6.5.0的。

我刪除了引用,然後使用NuGet下載並引用版本6.7.4.0中的相同程序集。這解決了我之前得到了錯誤,但現在Update-Database給了我以下錯誤:

Could not load file or assembly 'MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. 
The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 

我已經包括特定DbProviderFactory在我的web.config文件中解決了這個問題:

<system.data> 
    <DbProviderFactories> 
    <remove invariant="MySql.Data.MySqlClient" /> 
    <add name="MySQL Data Provider" 
    invariant="MySql.Data.MySqlClient" 
    description=".Net Framework Data Provider for MySQL" 
    type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 

如果我離開了remove標籤,我得到錯誤:

Column 'InvariantName' is constrained to be unique. Value 'MySql.Data.MySqlClient' is already present. 

我認爲這意味着,不知我的項目還是有DbProviderFactory提供MySQL庫的6.6.5.0版本。但是當我搜索我的項目的文本文件時,我無法在任何地方找到字符串6.6.5.0

目前這個解決方案讓我連接到我的本地MySQL服務器,但是當我將項目發佈到我的託管服務提供商並轉到我的瀏覽器中的網站時,我只是收到一條錯誤消息。我想知道如何刪除隱含的6.6.5.0-serving DbProviderFactory,這兩者都是我學習的一部分,因爲我認爲我的解決方法可能是我的網站無法在託管提供商處工作的原因。


作爲尋求解決辦法的一個線索,我覺得很可疑,當我嘗試添加一個參考,我只看到(幾個版本)6.6.5.0:

reference manager

但是,當我去的NuGet經理,我只有版本6.7.4.0安裝:

nuget manager

希望這有助於。

回答

1

我寫了一個blog post on this subject,我的項目可以在本文底部下載。

我必須安裝MySqlDataEntity -Pre,它安裝了測試版6.7.2測試版,以便與EF 5保持良好的兼容性,但是我看到現在的當前版本被標記爲6.7.4 ,所以我相應地更新了我的項目,並且它也能正常工作,所以我還更新了項目以從我的博客下載。

希望這可以幫助您從EF和MySql開始。

順便說一句,如果不清楚,你必須從NuGet安裝MySql.Data.Entities,它也將安裝MYSql.Data,因爲Entities取決於它。