2017-08-02 63 views
4

我想啓動一個MVC EF Visual Studio 2017項目。我有我的數據連接的建立與MySQL在我的本地實例,但是當我去創造一個ADO.net數據模型,我得到的圖片中看到的錯誤:VS 2017中的MySQL和MVC實體框架不工作

enter image description here

有另一篇文章在這裏: Can't use a MySQL connection for entity framework 6涵蓋VS 2012和2013,但2017年沒有下面是MySQL數據庫文件,說什麼版本的2017年工作:https://dev.mysql.com/doc/visual-studio/en/visual-studio-install.html

我使用:

MySQL連接網絡6.9.9 | MySQL for Visual Studio 1.2.7 | MySQL Server 5.7

MySQL.Data 6.9.9 | MySQL.Data.Entity 6.9.9 |實體框架6.1.3

所有這些都列爲MySQL測試和工作。我今天剛剛安裝了所有新東西,因此沒有出色的舊版本。我三重檢查;)

連接字符串:

<connectionStrings> <add name="MySQL" connectionString="server=localhost;port=3306;user id=root;password=password;database=localdb" providerName="MySql.Data.MySqlClient" /> </connectionStrings>


編輯

我發現這篇文章https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html談到有關建立連接,但現在反而是錯誤的,只要我點擊「下一步」,對話框就會消失。


這只是我做一些不正確的事情或一個破碎的MySQL連接器?

在此先感謝您的任何建議!

+0

您需要更新實體框架版本,因爲它表示您的項目更新,然後實體 – Ancient

+0

@Ancient我正在運行EF 6.1.3,它已於今天更新。 – Alex

+0

請將您的連接字符串添加到問題 – derloopkat

回答

2

因此,最終我做了什麼是我創建了一個新項目,並乾淨安裝MySQL.Data 6.9.9 | MySQL.Data.Entity 6.9.9 | Entity Framework 6.1.3,然後嘗試再次創建數據模型。

它幾乎奏效!我得到了一個錯誤:'System.Data.StrongTypingException: The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull. ---> System.InvalidCastException: Specified cast is not valid.但很多人通過進入MySQL命令行並執行:set global optimizer_switch='derived_merge=off'可以發現這個bug:https://bugs.mysql.com/bug.php?id=79163

無論出於何種原因,這可行。這裏是我的命令行的輸出,以幫助新手任何MySQL的:

enter image description here

這解決一切!希望有人發現這不會像我那樣浪費時間。

2

我必須要做的是重新安裝MySQL for Visual Studio 2.0.5,然後完全刪除並安裝MySQL Connector 6.9.9。似乎命令很重要。在那之後,我完全刪除這些軟件包,並嚴格按照此順序重新安裝:

(重新啓動Visual Studio之後)

EntityFramework 6.1.3 (I tried earlier versions and they don't work, so beware) 
Mysql.Data 6.9.9 
Mysql.Data.Entity 6.9.9 (NOT Mysql.Data.Entities!!! [for 6.9.9]) 
Mysql.Web 6.9.9 

然後,請確保以下是在你的web.config文件:

(編輯後重新啓動,以確保)

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

(你可能必須註釋掉任何現有的部分,並用此替換它)

最後一步,我不得不提醒自己,通過重訪here。 這部分是我忘了(太長),導致在問題的截圖中的錯誤。

最後一件事,您可能會將不正確的版本複製到Visual Studio的安裝位置;例如:

C:\Program Files (x86)\Microsoft Visual Studio\{年}\{社區|企業|專業}\Common7\IDE\PrivateAssemblies

C:\Program Files (x86)\Microsoft Visual Studio{版本號}\Common7\IDE\PrivateAssemblies

的MySQL。 Data.dll

MySql.Data.Entity.EF6.dll

MySql.Web.dll

(可能必須關閉Visual Studio的第一)

您可以選擇每個文件,然後進入在文件屬性下的Details選項卡查看您擁有的版本。

從這裏獲取新的文件(或你安裝了它): C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.9\Assemblies\v4.5 (假設使用框架V4.5 [查看項目屬性Application->Target Framework確認您的設置]連接器v6.9.9)。注意1:當您爲Visual Studio安裝MySQL時,它會更新PrivateAssemblies文件夾中的文件(請參閱上面的Visual Studio路徑),因此請仔細檢查上述程序集以確保它們不會更改爲任何內容除了你的目標版本(在這種情況下是6.9.9)。無論NuGet安裝什麼,Visual Studio都不會在乎,並且會查看私有程序集(實際上是在啓動期間)。

注2:如果您收到「IsPrimaryKey」錯誤,see here

我已完成的應用程序。配置對於緩建工程(與你的相比):

<?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> 
    <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, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider> 
    </providers> 
    </entityFramework> 
    <connectionStrings> 
    <!-- Connections Strings Go Here --> 
    </connectionStrings> 
    <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.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
    </system.data> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
+1

我按照你提到的每一步操作,現在我有一個使用MySql EF的C#項目...謝謝! – shahsani

+0

我正在使用Visual Studio 2017 Enterprise 15.4。2,而用於Visual Studio安裝的MySQL(使用MySQL安裝程序或獨立安裝程序)即使使用dev版本也會失敗。我試圖做這個解決方法==> bugs.mysql.com/bug.php?id=85908&thanks=3¬ify=195,但安裝仍然回滾到90%。請幫忙,我努力從3天以來從我的數據庫更新我的模型:/ No MySQL Database選項在我點擊新連接窗口中的「從數據庫更新模型」時顯示。 –

+0

最好的辦法是從頭開始,卸載所有與MySQL相關的*數據庫除外,然後按照步驟_以正確的順序_。如果不是正確的順序,事情將無法正常工作。至於你的安裝程序失敗,它可能是任何東西,所以我不能幫你。我遇到了類似的情況,公司域策略阻止了從zip文件解壓縮EXE的運行。如果你沒有那個,那麼你可能有一個病毒掃描器干擾。您也可以嘗試進程監視器(從MS下載)來監視在發生錯誤時的文件訪問。 –

0

@詹姆斯·威爾金斯感謝您的詳細回答,我已經添加,有時當你添加Mysql.data或MySQL.data.entity大會版本與由MySqlConnector/Net安裝的程序集不匹配,因爲我們經常從Nuget下載最新版本,這會再次導致此問題,所以我做了什麼並解決了問題,我複製了dll(Mysql.data,MySQL.data從

C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.9\Assemblies\v4.5 

我的應用程序斌/ debug文件夾.entity和網絡),並參考這些,而不是從下載Nugets。這解決了我的問題。您可能還需要更新app.config或web.config和packages.config文件中的程序集版本。

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> 

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> 

而且這裏packages.config在

<package id="MySql.Data" version="6.9.9" targetFramework="net452" /> 
    <package id="MySql.Data.Entity" version="6.9.9" targetFramework="net452" /> 
    <package id="MySql.Web" version="6.9.9" targetFramework="net452" /> 
0

優化更新版本的條目,以確認我得到的一切 - 包括工作的DB-第一貴VS2017實體框架的工具鏈 - 在.net 4.7.1 asp.net-mvc5 wev-solution上通過在Visual Studio 2017上使用這些確切的組件(VS2017 => ver15.5.7,也就是在此時完全更新VS2017寫):

Entity Framework ver6.2.0 [nuget] 
MySql.Data ver6.9.11 [nuget] 
MySql.Data.Entity ver6.9.11 [nuget] 
MySql.Web ver6.9.11 [nuget] 
MySQL for Visual Studio ver2.0.5 [system-wide msi installer] 
MySql-Connector ver6.9.11 [system-wide msi installer] 

我嘗試使用最新的MySQL連接器(ver.6.10.x),但事實證明,VS2017爲DB-第一種方法的GUI工具將不能工作。我想MySql連接器必須與其他版本的智能版本保持一致。

Web.config文件看起來像這樣:

<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    [...] 
    </configSections> 

    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True;" /> 
     </parameters> 
    </defaultConnectionFactory> 
    [...] 
    <providers> 
     <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
     [...] 
    </providers> 
    [...] 
    </entityFramework> 
    [...] 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient" /> 
     <add description=".Net Framework Data Provider for MySQL" invariant="MySql.Data.MySqlClient" name="MySQL Data Provider" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" /> 
    </DbProviderFactories> 
    </system.data> 
    [...] 
</configuration> 

而且在app.config託管.edmx文件子項目看起來像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" 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" /> 
     [...] 
    </providers> 
    </entityFramework> 
    [...] 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient" /> 
     <add description=".Net Framework Data Provider for MySQL" invariant="MySql.Data.MySqlClient" name="MySQL Data Provider" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" /> 
    </DbProviderFactories> 
    </system.data> 
    [...] 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" /> 
    </startup> 
</configuration> 

而且packages.config:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="EntityFramework" version="6.2.0" targetFramework="net471" allowedVersions="[6.2.0]" /> 
    <package id="LinqKit" version="1.1.13" targetFramework="net471" allowedVersions="[1.1.13]" /> 
    <package id="MySql.Data" version="6.9.11" targetFramework="net471" allowedVersions="[6.9.11]" /> 
    <package id="MySql.Data.Entity" version="6.9.11" targetFramework="net471" allowedVersions="[6.9.11]" /> 
    <package id="MySql.Web" version="6.9.11" targetFramework="net471" allowedVersions="[6.9.11]" /> 
</packages> 

注意:通過[allowedVersions]有意調整了packages.config,以禁止unin將MySql軟件包自動升級到更新的版本。這是由於困擾MySql核心的6.10.x風格的閃避問題。