实体框架用mysql数据库优先

时间:2018-05-08 13:36:11

标签: c# mysql entity-framework

我正在使用c#在新项目中工作,我们希望使用实体框架6,但每次我们想要根据我们使用的数据库生成模型。但是当我使用向导生成ADO.Net模型时,在我选择数据库和实体框架后,我点击" next"按钮,而是出现选择表格的窗口,窗口消失,没有任何类型的错误。

我正在使用Visual Studio 2017社区版,我已经安装了mysql连接器v.8.0.11。如果我将mysql连接器版本和实体框架降级到v5,一切都可以正常工作,但在我将连接器和实体框架更新到版本6之后。*我得到了上面报告的问题。

5 个答案:

答案 0 :(得分:5)

所以我自己挣扎了三天后终于找到了问题...

因此,您必须从NuGet软件包版本中下载的MySql.Data和MySql.Data.Entity与必须下载的MySql Connector / NET的版本直接相关。

当您查找MySql.Data.Entity的最新版本为6.10.7时,因此这意味着当下载Connector / NET 8时,版本不兼容,这导致ADO.Net数据实体向导关闭。

下载以下内容,然后BAM起作用:

MySql for visual studio 
MySql Connector/NET v6.10.7   

NuGet软件包:

Entityframework v6.1.3    
MySql.Data v6.10.7    
MySql.Data.Entity v6.10.7 

答案 1 :(得分:0)

这是您正在使用的MySQL连接器包版本的问题。就我而言,我正在使用Nuget的MySQL.Data, MySQL.Entity and MySQL.Web。如果我在6.9.11之后使用任何版本,那么我会得到你提到的行为。

答案 2 :(得分:0)

我能够通过在Web.config上执行以下配置来解决此问题

<entityFramework>
  <defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  <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.EntityFramework, Version=8.0.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
  </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=8.0.11.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D" />
  </DbProviderFactories>
</system.data>

我也提到:

答案 3 :(得分:0)

一件事值得注意:

对于Mysql版本6和版本8,您将需要不同的Mysql EntityFramework软件包。(这可能是发布者将其mysql连接器从8降级为6的原因)

如果您的mysql连接器版本为8.x.x,则可能需要安装以下NuGet软件包: https://www.nuget.org/packages/MySql.Data.EntityFramework/

如果mysql连接器的版本为6.x.x,则需要: https://www.nuget.org/packages/MySql.Data.Entity/

并安装与mysql连接器完全相同的版本。否则,某些操作将无效。

答案 4 :(得分:0)

-第一步-
使用mySql安装程序:https://dev.mysql.com/downloads/installer/
下载
1-MySQL路由器
2-连接器/ ODBC
3-连接器/ C ++
4-连接器/网络
5-MySQl服务器
全部,完全在版本中:8.0.12

然后转到visual studio > manage nugget packages > browse(tab)(并安装)
1-entityFramework->版本6
2-mysql.data-> 8.0.12版
3-mysql.data.entity->版本6
4-mysql.data.entityFramework->版本8.0.12

然后转到visual studio > manage nugget packages > updates(tab)
将Google.protoBuf更新到版本3.6.0

-第二步-
Right click your project > Add new Item > Data (left navbar) > Ado.net Data Model
将出现“连接”对话框,使用您的Mysql(8.0.12版)凭据创建一个新连接。
(检查输入:将敏感数据包含在connectionString中。)

您将得到一个错误!因为预配置的MySqlProviderServices带有8.0.11版本,所以您要做的就是在App.config文件中对其进行更改(下一步)。 问题是:当您查看MySql.Data.Entity的最新版本是6.10.7,因此这意味着当下载Connector / NET 8时,版本不兼容,这导致ADO.Net数据实体向导关闭。

-第三步(最终)-
转到您的App.config文件,然后将您的“ providers”标签更改为类似

<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.10.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />-->
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</providers>

仅此而已,现在构建项目,完成后就可以创建实体数据模型 (例如,首先使用数据库。)并映射您的MySql数据库并在您的项目中查询它
资源:
https://www.youtube.com/watch?v=xvgeeaVP4M4
https://www.devjockeys.com/blog/c-sharp/using-entity-framework-with-mysql-a-code-first-example/
https://ozanecare.com/connect-mysql-with-visual-studio-2019/
Entity Framework With mysql Database First