你的位置:首页 > ASP.net教程

[ASP.net教程]使用EntityFramework6连接MySQL


使用EntityFramework6连接MySQL

不是微软的亲儿子这待遇就是不一样,其中的坑可真实不少,为了连MySQL足足折腾了我大半天。

废话不多说直接开始。

安装MySQL

从官网上下载最新版,下载好以后直接安装就可以了。最新版的MySQL已经包含了所有开发需要的功能(包括MySQL连接器),相信会用MySQL,怎么装应该都没有问题,这里就不啰嗦了。不过有一点值得提醒的是,在选择要安装的内容时记得将所有功能都装上,之后出现问题多半都是哪个模块漏装了。

使用Entity Framework6 连接MySQL数据库

准备工作都就绪了,接下来我创建一个项目来演示如何连接MySQL数据库。

考虑到有些同学可能并不使用.NET MVC,所以这里我们创建一个控制台项目来演示。别担心,在.NET MVC中,配置的过程都是完全一样的。

一、添加EF包

打开NuGet包管理工具后,点击浏览,然后搜索EntityFramework。先按装EntityFramework,再安装MySQL.Data.Entity.

之后选择ADO.NET实体数据模型,我取名为DBModel。

选择来自数据库的CodeFirst模型,点击下一步。

输入你的数据库地址(默认是localhost)和账号、密码,勾选保存密码,在数据库名称中选择你对应的数据库,在这我的是test。完成后点击测试连接,提示没有问题后点击确定。这一步如果出错一般都是数据库配置的问题,跟EF没有关系。

选择你需要的数据库和表,在这我选择的是我之前在数据库中创建的Student表。确定所生产对象名称的单复数形式这个选项随意。最开始我也没理解到它的作用,其实就是英语的单复数,就是在名词后面加S和不加S。

点击完成之后如果你幸运的话,到这一步就成功了。不过事情一般没那么简单,傲娇的EF就提示我什么主键值为空。

我第一次弄的时候这东西折磨了我大半天,什么办法都试尽了,好在最后在Stack Overflow上找到了办法。

打开MySQL管理器,执行

  1. use `test`; /*你的数据库名*/
  2. set global optimizer_switch='derived_merge=OFF';

执行完之后再按照上面的步骤从头一遍应该就可以了,如果还是不行就重启一下MySQL服务,再执行一下上面的代码,再试试。

三、分析生成的代码

回到解决方案资源管理器,这时我们的项目下就应当多了两个文件,一个是DBModel数据上下文(到时都是通过它来操作数据库),一个是student数据模型

打开DBModel.cs

student数据模型中对数据做了些描述(你不用代码优先CodeFirst这些一般都不用管)

  • select t).First();
  • Console.WriteLine("张三的年龄是:" + student.age); //输出:张三的年龄是:15
  • db.students.Remove(student); //删除张三
  • //db.Entry(student).State = System.Data.Entity.EntityState.Deleted; //或者这样删除张三
  • db.students.Add(new student { name = "小明", age = 21 }); //向数据库中添加小明
  • student = (from t in db.students //查询李四
  • where t.name == "李四"
  • select t).First();
  • student.age = 999; //更改李四的年龄
  • //db.Database.ExecuteSqlCommand("delete from test.student where true"); //执行普通的SQL,删除全部数据
  • //var result = db.Database.SqlQuery<student>("select * from test.student"); //执行普通的SQL,查询所有学生
  • db.SaveChanges(); //保存结果
  • }
  • Console.Read();
  • }
  • }