2014-10-09 57 views
21

我試圖通過C#.NET web MVC應用程序連接到MySQL。在Visual Studio 2013中使用EF6的MySQL Connector

我的問題是,當我嘗試添加一個ADO.NET實體數據模型,從數據庫中生成的,根據我的MySQL連接,我收到以下錯誤信息:

你的項目引用最新實體框架的版本;然而, 然而,與您的數據連接無法找到此版本的 兼容的實體框架數據庫提供程序。 退出此嚮導,安裝兼容的供應商, 和執行此操作

我運行了以下軟件之前重新生成項目,升級&附加組件:

  • 的Visual Studio 2013
  • MySQL服務器v5.6.21
  • MySQL對於Visual Studio v1.2.3
  • 連接器/ NET v6.9.4

的NuGet包:

  • 的EntityFramework V6.1.1
  • MySQL.Data v6.9.3
  • MySQL.Data.Entities v6.8.3.0
  • SQL.Web v6.9.3

我的web.config,的EntityFramework塊:

.. 
</system.webServer> 
<entityFramework> 
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" /> 
    <providers> 
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
    </providers> 
</entityFramework> 
<runtime> 
    .. 

我已經看過所有其他解決方案,我可以在這裏找到關於一般通過谷歌,嘗試所有這些解決方案似乎都沒有工作或已經爲非常不同版本的連接器/網絡或其他需要的程序。

任何人都可以發現我做錯了什麼嗎?

+1

我建議安裝Visual Studio版本(1.2.3)最新的MySQL。看起來您安裝的1.1.1與安裝的Connector/NET v6.9.4不兼容,請參閱(表4.1):http://dev.mysql.com/doc/connector-net/en/connector-net-visual- studio-install.html – Rimas 2014-10-13 12:29:09

+0

你好 - 我剛剛檢查過它,顯然我已經有Visual Studio v1.2.3的MySQL。雖然謝謝! :) – Eax 2014-10-13 14:16:06

回答

8

基本解決方案是重新安裝MySQL和VisualStudio 包括實體和.NET。

由於某種原因,我不確定爲什麼,安裝過程會破壞DLL,或者至少那是我和其他同事的經驗。我們的解決方案是嘗試所有以上都無濟於事。所以最後我們試圖重新安裝,並且它工作。所以試試:)

+4

重新安裝的伎倆,感謝拉斯! 快速側面說明了旁邊的人看。當你重新安裝時可能會遇到的ADO。 NET對象嚮導崩潰,這可以通過以下方式解決: 「事實證明,我的項目中的參考文件必須從擴展選項卡中刪除並重新選擇,然後編譯everythin並使用」Code First from database「工作得很好!「 來自:http://forums.mysql.com/read.php?174,606395,618190#msg-618190 其中至少爲我工作 – Eax 2014-10-14 12:48:09

+0

唉,很不清楚:刪除哪些引用?而在視覺工作室201中4「擴展選項卡」;從數據庫中選擇Code First而不是「EF Designer from database」仍然會使嚮導消失 – 2017-02-10 09:12:01

1

現在這不是一個問題,我有我自己,但我沒有找到以下可能的解決方案:

  1. 右鍵單擊該解決方案(Solution Explorer中的最高級別)。
  2. 管理解決方案的Nuget包。
  3. 轉到已安裝選項卡。
  4. 對於所有與EntityFramework相關的包(MySql.Data,MySql.Data.Entities,MySql.ConnectorNET.Entity和MySql.ConnectorNET.Data),請選擇它們,然後選擇「管理」按鈕。
  5. 爲所有項目啓用每個包。

我在這裏注意到的是他有兩個額外的包,你沒有提到「MySql.ConnectorNET.Entity」和「MySql.ConnectorNet.Data」。這可能是你錯過了這些,他們需要與Entity Framework 6.1一起工作。1

(來源:No Entity Framework Provider Found For

+0

你好。我指出後發現,我已經安裝了MySQL.ConnectorNET.Entity,現在已經安裝了MySQL.ConnectorNET.Data,但無濟於事。 我也試過可能的解決方案,但它似乎沒有工作。雖然謝謝! – Eax 2014-10-09 14:24:27

0

我有一個MySQL連接庫和EF6 V6.0.0的版本6.8.3工作項目。我記得這個錯誤,我想我解決了手動添加一些行到app.config。

我列出你在我的app.config有關EF6和MySQL配置的線,是你的不同,也許它可以幫助你:

<configSections> 
    ... 

    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
</configSections> 
<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
     <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider> 
    </providers> 
</entityFramework> 

我已經安裝了MySQL連接網絡6.8.3與包從MySQL站點下載,並添加了兩個對Project:MySql.Data和MySql.Data.Entity.EF6的引用,都是6.8.3版本(我注意到你使用的是這個文件的不同版本......)。

我通過Nuget向項目添加了EF6(v 6.0.0)。

不是最新的版本,但希望這有助於。

+0

嗨! 我想你的解決方案,但都無濟於事:(謝謝儘管! – Eax 2014-10-13 09:34:08

22

我有同樣的問題。安裝完成後:

  • 的Visual Studio 2013社區版
  • 的MySQL爲Visual Studio 1.2.3
  • MySQL連接.NET 6.9.5

我不想重新安裝Visual Studio中,所以經過一些測試後,我發現文件夾「C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ PrivateAssemblies」包含以下文件的舊版本:

  • MySql.Data.dll
  • MySql.Data.Entity.EF6.dll
  • MySql.Web.dll

關閉Visual Studio中後,我在「被C這些文件與:\ Program Files文件(x86)\ MySQL \ MySQL連接器網絡6.9.5 \ Assemblies \ v4.5「,現在它工作!

注意:將上述子文件夾名稱中的6.9.5替換爲系統中安裝的實際版本。

+1

謝謝!這是我開始使用新機器的時候。 – meanbunny 2015-06-23 14:55:41

+1

謝謝!在我的情況下,我使用.Net 4.0,所以我從**'C:\ Program Files文件(x86)\ MySQL \ MySQL連接器網6.9.X \ Assemblies \ v4.0' ** – itsho 2015-07-31 11:32:07

+0

這是唯一的所有我讀過的解決方案。非常感謝。 – 2015-10-05 21:34:09

0

解決方法是將此項添加到app.config/web.config您正在嘗試添加/修改數據模型的項目上。

<system.data> 
    <DbProviderFactories> 
     <clear /> 
     <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.9.5.0, 
       Culture=neutral, 
       PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
    </system.data> 

根據您的連接器更改版本。

1

如果您需要將EntityFramework與mysql數據庫結合使用,您只需要在軟件包管理器控制檯上安裝早期版本的EntityFramework,如v 5.0。編寫Install-Package EntityFramework -Version 5.0.0。 享受。 https://www.nuget.org/packages/EntityFramework/5.0.0

3

只需添加到web.config中:

<system.data> 
    <DbProviderFactories> 
     <clear /> 
     <add name="MySQL Data Provider" 
      invariant="MySql.Data.MySqlClient" 
      description=".Net Framework Data Provider for MySQL" 
      type="MySql.Data.MySqlClient.MySqlClientFactory, 
       MySql.Data" /> 
    </DbProviderFactories> 
    </system.data> 

不要忘記嘗試添加一個ADO.NET實體數據模型,從數據庫生成,再之前重新生成解決方案

0

首先,重新安裝VS 1.2.3,把下面的引用到您的項目或檢查它的版本:

MySql.Data.dll

MySql.Data.Entity.EF6.dll

MySql.Web.dll

刪除在App.config中或Web.config中 默認的EntityFramework標籤重建您的項目,你可以添加ADO.NET實體數據模型

18

這對我來說沒有重新安裝Visual Studio或任何有史以來的東西。

  • 安裝刪除的標籤的EntityFramework在App.config中或Web.config文件及其所有子標籤最新的MySQL的Visual Studio插件和MySQL連接器淨
  • 取代它用下面的代碼:
<entityFramework> 
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" /> 
    <providers> 
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
</entityFramework> 
  • 加入 MySql.Data.dll,MySql.Data.Entity.EF6.dll,和MySql.Web.dll(如果而不是WPF應用程序)引用該項目。
  • 重建該項目,然後添加ado.net模型。

注意:請確保您刪除只有的EntityFramework標籤和它的孩子,並與上述剪斷更換。如果刪除任何「額外」標籤,您可能會對您的項目造成更大的問題,就像我一樣。 X)

0

我在使用visual studio 2013社區。想要在MySQL數據庫上執行Code First。我遇到了同樣的問題:「您的項目引用了實體框架的最新版本;」 解決我的問題的方法很簡單,步驟如下。

  1. 添加一個項目後,使用的NuGet控制檯添加EntityFramework6.1.3,通過安裝包的EntityFramework
  2. 用戶控制檯通過MySQL.Data添加MySQL參考。實體
  3. 打開您的Web.config或App.config中改變的EntityFramework和system.data部分下面

     <entityFramework> 
         <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
         <providers> 
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer" /> 
          <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> 
         </provider> 
         </providers> 
        </entityFramework> 
        <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.9.7.0,  Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
         </DbProviderFactories> 
        </system.data> 
    
  4. 給出此時要確保你重建項目。 (這是必須的)

  5. 現在添加ADO實體模型,並選擇MySQL,它的工作原理。

通過插件我用的方式是M4VS 1.2.3和MySQL .NET連接器6.9.7

0

很簡單,我用的NuGet引用MYSQL.DLL(ETC),它會自動引用.net 4.0 dll的。我只是將引用更改爲4.5,並且它工作。

0

做的NuGet命令行

update-package -reinstall -ignoreDependencies 

,重建解決方案 這項工作或我

+0

這對於大規模更新非常有用。 – 2016-08-23 03:46:59

3

我遇到了同樣的問題。幸運的是,我修復了它。 MySql.Data.dll或MySql.Data.Entity.EF6.dll與EF 6.1版本不兼容。我所做的,我通過這個命令 - > install-package entityframework -version 6.0.0.0在nuget控制檯中安裝了EF版本6.0.0.0,並修復了問題。

+0

謝謝,只有這對我有用 – neustart47 2017-12-07 00:12:35

0

我說這裏面解決了這個問題對我來說:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime>