簡體   English   中英

在 Microsoft Visual Studio 2013 的 WinForms 中為 MySql (C#) 啟用實體框架 6

[英]Enable Entity Framework 6 for MySql (C#) in WinForms of Microsoft Visual Studio 2013

昨天我知道 Entity Framework 是除使用 Dataset 或 DataReader 之外的另一種訪問數據庫的方法,然后我嘗試使 Entity Framework 6 在 MVS 2013 中為我的 MySql 數據庫服務器工作。

我用 .Net FrameWork 4.5.1 打開一個 WinForms。 (所以我在項目中只有 App.config 但沒有 app/web 配置)安裝mysql-installer-community-5.7.3.0-m13.msi

通過安裝 EntityFramework 包

工具菜單 -> 庫包管理器 -> 管理解決方案的 NuGet 包... -> 在線 ->(搜索)EntityFramework(注意此包的版本,它應該是 6.0.2 版,如果不是,則單擊更新 -> EntityFramework更新)

當我嘗試通過以下方式添加 ADO.NET 實體數據模型時

右鍵Project -> Add -> New Item -> ADO.NET Entity Data Model -> Generate from Database -> New Connection -> Data sources: -> Change...-> MySQL Database -> 填寫Server name with服務器 IP、用戶名和密碼 -> 選擇數據庫名稱 -> 測試連接 -> 確定

然后生成實體連接字符串 -> 在 App.Config 中勾選 Save entity connection settings as -> Next> ->

您要使用哪個版本的實體框架? 有選項 Entity Framework 6.0 但你不能使用它,因為

“您的項目引用了最新版本的實體框架;但是,無法為您的數據連接找到與此版本兼容的實體框架數據庫提供程序。退出此向導,安裝兼容的提供程序,並在執行此操作之前重新構建您的項目”。

如何解決這個問題?

順便說一下,如果您在 Nuget 包中安裝 Entity Framework 版本 5,那么您可能會在此處選擇 Entity Framework 5.0,並且您可能會成功使用 Entity Framework 5 而不是版本 6。

首先,我們甚至不需要安裝mysql-installer- community -5.7.3.0-m13.msi。

  1. 安裝最新的mysql-visualstudio-plugin
  2. 安裝最新的mysql-connector-net
  3. 新的 C# .Net 4.5框架 WinForms(對於4.0,它應該基於實體框架 6 支持 .NET 4.0 嗎?
  4. 安裝 4 個Nuget 包(按照順序,如果你在 EntityFramework 之前安裝 Mysql.Data.Entities,它將解析依賴並安裝 EntityFramework 6.0.2但我們需要的是 EntityFramework 6.1.0

實體框架

mysql.data

Mysql.Data.Entities

mysql.web

5.如果App.config中entityFramework標簽,請在標簽啟動后注釋並在App.config中插入新標簽entityFramework

  <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>

6.添加ADO.NET 實體數據模型(如問題所述)

7.生成實體連接字符串后(如問題所述)並勾選在 App.Config 中保存實體連接設置,然后單擊下一步

8.選擇您的數據庫對象和設置(表、視圖或存儲過程和函數)(沒有“您要使用哪個版本的實體框架?”因為我只有一個實體框架 6.0 提供程序所以直接跳過如果我唯一的提供者有效,則選擇)

9.完成

恭喜^^

順便說一句,您可能需要添加 .dll 文件

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

在這個文件夾里面

C:\\Program Files\\MySQL\\MySQL Connector Net 6.8.3\\Assemblies\\v4.5(32 位窗口)

C:\\Program Files (x86)\\MySQL\\MySQL Connector Net 6.8.3\\Assemblies\\v4.5(64 位窗口)

作為進一步 EF6 功能的項目參考。

我遵循了 V-Shy 給出的指示,遇到了與 LaRae White 相同的問題,向導關閉了我。 我正在運行 VS2015 並且剛剛使用 MySql 安裝程序更新到 MySQL for Visual Studio v1.2.6 和 Connector/NET v6.9.8。

我最終為了讓它工作而做的是這樣的:

  1. 卸載我之前安裝的所有包來解決這個問題(EntityFramework、Mysql.Data、Mysql.Data.Entities、Mysql.Web)
  2. 手動添加了在 C:\\Program Files (x86)\\MySQL\\Connector.NET 6.9\\Assemblies\\v4.5 中找到的以下引用:MySql.Data.dll、MySql.Data.Entity.EF6.dll 和 MySql.Web。 dll

我希望能幫助別人。

我花了一整天的時間弄清楚如何解決這個問題,但沒有任何幫助。 顯然我想出了一件人們沒有提到的事情

在model.edmx 屬性中有完整的“DDL 生成模板”,默認設置為“SSDLToSQL10.tt (VS)”但需要設置為“SSDLToMySQL.tt (VS)”

更重要的是它也產生了一個錯誤:

正在運行轉換:System.NullReferenceException:未將對象引用設置為對象的實例。
布拉布拉布拉
第 93 行 c:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\Extensions\\Microsoft\\Entity Framework Tools\\DBGen\\SSDLToMySQL.tt

是什么讓我找到了“MySQL for Visual Studio 1.1.3”中官方錯誤,錯誤將在下一個版本 1.1.4 中修復,目前尚不可用。

但是有解決方法修復:
覆蓋“MySql.Data.Entity.EF6.dll”中的
C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\PrivateAssemblies
通過 NET 連接器中的文件
C:\\Program Files (x86)\\MySQL\\MySQL Connector Net 6.8.3\\Assemblies\\v4.5\\

修復方法如下:

  1. 安裝 MySQL Visual Studio 插件
  2. 為 .NET 安裝 MySQL 連接器
  3. 在程序文件中的 MySQLConnector 程序集的項目中添加引用。
  4. 從 App.Config 或 Web.Config 中刪除舊代碼

    <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>

  5. 替換為下面給出的代碼:

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

  6. 重建項目並嘗試添加新的 ADO .NET 實體數據模型

確保您的DbContext具有 MySQL 文檔中所示的注釋:

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public partial class MyDbContext : DbContext
{
}

我一直發現我的數據庫第一個ASP.NET MVC 應用程序允許我更新我的 EDMX 文件,直到我在另一台機器上將它從源代碼控制中取出。

我希望這可以幫助那些在使用 MySQL 和 Entity Framework 6 時無法更新他們的 EDMX 或發現錯誤的人,因為在我添加注釋之前我一直面臨同樣的錯誤。

我遇到了同樣的問題,並嘗試了各種修復,比如這里的修復,還有一些來自 MySQL 論壇的修復,但仍然無法更新我的 EDMX。

一段時間后(非常長的時間),我設法讓這件事與 VS 2013 更新 3、.Net 連接器 6.9.4、Mysql for VS 1.2.3 一起用於我的 MvcApplication。

首先,我嘗試了一台全新的機器,一切都通過簡單的 VS 安裝工作,然后是連接器和 Mysql for VS。 然后,我還嘗試使用舊的 VS 2012,它也有效。 我已經在我的機器上用 EF5 編寫了一些項目,並假設舊的 EF5 文件可能會干擾 EF6 文件。

所以這就是我所做的,但你必須記住,這是一個與機器相關的問題,我給你一個我在絕望中嘗試過的所有事情的清單:

  1. 刪除 C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\PrivateAssemblies 文件夾中的所有 MySql.*.dll

  2. 用連接器文件夾中的一個覆蓋文件夾 C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\PublicAssemblies 中的 MySql.Data.Entity.dll

  3. 在 Nuget 控制台中從您的項目中卸載 EntityFramework,然后降級到 EF 6.0.0:Install-Package EntityFramework -ProjectName YourProject -version 6.0.0

  4. 添加對 MySql.Data.Entity.EF6 的引用,而不是使用 Nuget,而是直接引用文件 (C:\\Program Files (x86)\\MySQL\\MySQL Connector Net 6.9.4\\Assemblies\\v4.5\\MySql.Data.Entity .EF6.dll)

我的 app.config 文件看起來像這樣

<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>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
        <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>
    <connectionStrings>
        <!-- your connection string here -->
    </connectionStrings>
</configuration>

而項目中添加的引用就是這三個

  • 實體框架
  • 實體框架.SqlServer
  • MySql.Data.Entity.EF6

也許有些步驟沒用,但現在我終於可以更新我的 EDMX 文件了,當然,構建和運行 Web 項目,VS 似乎不受刪除 MySql DLL 的影響。 希望能幫助到你。

我也有同樣的問題。 就我而言,我不得不:

  • 在啟動添加模型向導之前添加包后重建項目。
  • 卸載最新版本的實體框架包並恢復到 6.0.0.0 版。
  • 安裝 Mysql.Data.Entities 后不要安裝 Mysql.Data.Entities.EF6!!
  • 更改配置文件,以便只有一個MySql.Data.MySqlClient 提供程序在提供程序中,並且應該包含版本:

     <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.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider> </providers>

這些答案都沒有為我解決。 唯一有效的是安裝 MySql.Data.EntityFramework NuGet 包。 我重新啟動 VS,重新構建,然后能夠通過向導。 (VS2017 15.8.7 中的 WPF)。

我與 VS2013 社區有類似的問題,但我的不是 WinForm,而是 ASP.NET MVC。 在遵循上述所有解決方案之后,我的問題仍然存在,但是他們(尤其是 Hamed)給了我一些解決它的想法。

所以如果你仍然滾動到這里,這可能也會給你一個想法。 我有:

  1. 已安裝 MySQL Connector NET 6.8.4(6.9.5 似乎不起作用)。
  2. 將 MySQL 保留為 VS 1.2.3(由於 1.2.3 工作,無需安裝 1.1.1)。
  3. 從 NuGet 安裝 MySQL.data Mysql.Data.entities。
  4. 從 D:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\PrivateAssemblies 中刪除了所有 MySQL.dll。
  5. 按照哈米德說的做。
  6. 重建解決方案。
  7. 成功添加了新的 ADO.NET 實體模型。

希望這有幫助。

在過去 2 天里掙扎了幾個小時后,最終幫助我的是將我的所有代碼恢復為舊的 EF5 代碼,刪除 ADO .NET 實體數據模型並重新添加它而不選擇實體框架 6.0(已禁用) ,但選擇 5.0。 由於最新的 mysql 連接器、visual studio 插件和我如上所述安裝的所有其他東西,visual studio 自動添加了一個實體框架 6.0 ADO 實體數據模型,而忽略了我的“選擇”。 然后我在任何需要它的項目(EntityFramework、mysql.data、mysql.data.entity.EF6 ver 6.9.6)中手動添加了所有引用,最后它工作了。

我有像 ih303 這樣的問題。 我是如何修復它的:

-遵循解決方案 V-SHY

- 如果沒有錯誤消息或類似的東西,向導就會消失 -> 執行以下解決方案(對我有用):

而不是放入:

    <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>

將其更改為以下內容:

    <entityFramework>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="mssqllocaldb" />
        </parameters>
      </defaultConnectionFactory>
      <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.Entity.EF6
MySql.Data

相反,我安裝了 Nuget

MySql.Data.Entity

它所做的不僅是添加了對上面刪除的框架的引用,而且還在項目中進行了一些配置更改。 安裝完nuget后,我也重新構建了項目,這樣dll文件就會被添加到bin目錄下。

對我來說,這似乎與 32 位 VS 64 位數據庫驅動程序有關。

至少在這一點上,我可以通過將配置更改為 x64 在出現此錯誤和不出現此錯誤之間來回切換。 嘗試任何 CPU 都不行,嘗試 x86 也不行。

我不確定在哪里決定是使用 32 位還是 64 位 MySQL 驅動程序; 安裝程序聲稱安裝了兩者。

(我還需要添加一個或多個 NuGet 包MySql.DataMySql.Data.EntityMySql.Data.Entities ,以及EntityFramework 。)

一旦我將模型添加到我的項目中,我就可以將項目切換回 x86,到目前為止沒有任何問題。

當我們使用 Oracle 連接添加項目 ADO.NET 實體數據模型時,顯示錯誤消息“您的項目引用了最新版本的實體框架...”

解決步驟在這里;

  1. 將 Oracle ODTwithODAC122010 安裝為 32 位

  2. 在 VS2017 中創建你的項目

  3. 將 Active Solution Platform 從 AnyCPU 更改為 32 位

  4. 打開工具->Nuget PackageManager-> 管理解決方案的 Nuget 包

  5. 編寫瀏覽區“ODP”並安裝以下程序

甲骨文。 ManagedDataAccess 和 Oracle.ManagedDataAccess.EntityFramework

6.打開工具->Nuget PackageManager-> Package Manager Console

7. 編寫這個 Install-Package EntityFramework -Version 6.1.1 並回車

8.重新啟動Visual Studio以完成該過程

9.重新構建您的應用程序

  1. 添加新項目 ADO.NET 實體數據模型

11.如果需要,將新連接添加到 Oracle(數據源 = Oracle 數據庫(ODP.NET,托管驅動程序))

12.一切正常。

注意我問 EF6.1.3 不適用於 VS2017 和 Oracle ODTwithODAC122010。 但是在所有這些過程之后,我已將 EF 更改為 EF6.1.3,它正在運行但我不建議您。

對我來說,問題通過重新安裝解決了

  • 連接器/網絡(版本:8.0.19)
  • Visual Studio 的 MySQL(版本:1.2.9)

現在我也可以使用 vs2017 和 vs2019 生成 edmx。

對我MySql.Data.Entity的解決方案是首先按照@V-SHY 的步驟安裝MySql.Data.Entity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM