EntityFramework6 连接mysql数据库(code first模式)
2015-06-15 20:36
776 查看
这是我第一篇技术文章,我是一个懒得动笔的人,不知道能不能坚持下去。
这篇文章是介绍 EntityFramework6 连接mysql数据库(code first模式), 也同时可以连接mariadb, 因为我自己是使用mariadb的。
在网上参考了不少中文的,外文的相关的 EntityFramework6 code first 连接mysql , 很少看到有讲全的或者忽略了一些关键点的, 导致不能成功的,这边我把关键点写下,以便日后自己回顾。
Demo已经上传到github中,可直接下载运行
https://github.com/tangolivesky/MySqlCodeFirstDemo
需要的环境:
1. 安装 MySQL Server 或mariadb Server
2. vs2013
就这两个就够了,不需要安装 MySQL Connectors , 因为很多博文中都写了需要安装这个
一、新建一个类库项目
二、从nuget中直接安装 MySQL.Data.Entities, MySql.Data.Entity 会关联安装上 MYSQL.Data , EntityFramework 这些类库。 (nuget的推出确实方便了我们对于类库的管理,想起以前手动引用dll的日子是多么的艰苦和容易出错)
![](https://img-blog.csdn.net/20150616202441456)
引用后如下图
![](https://img-blog.csdn.net/20150616202347037)
三、 然后就可以建一个 DbContext的类了, 很简单的一个类
在WebConfig中增加这一段
四,在nuget控制台中运行 Enable-Migrations 成功
在nuget控制台中运行add-migration Initial 失败
提示: No MigrationSqlGenerator found for provider 'MySql.Data.MySqlClient'
原因是mysql 不像sqlserver VS可以自动知道去找MigrationSqlGenerator, 而是需要手动指定,你只需要在Migrations文件夹的Configuration文件中增加这么一段
![](https://img-blog.csdn.net/20150616202529218)
然后在nuget控制台中运行update-database,看看能不能code first 成功呢,结果还是提示失败
你需要在DbContext中增加这段代码
![](https://img-blog.csdn.net/20150616202614273)
再运行试试看,是不是成功了呢。
看看数据库中有没有? 果然有了呢。
这篇文章是介绍 EntityFramework6 连接mysql数据库(code first模式), 也同时可以连接mariadb, 因为我自己是使用mariadb的。
在网上参考了不少中文的,外文的相关的 EntityFramework6 code first 连接mysql , 很少看到有讲全的或者忽略了一些关键点的, 导致不能成功的,这边我把关键点写下,以便日后自己回顾。
Demo已经上传到github中,可直接下载运行
https://github.com/tangolivesky/MySqlCodeFirstDemo
需要的环境:
1. 安装 MySQL Server 或mariadb Server
2. vs2013
就这两个就够了,不需要安装 MySQL Connectors , 因为很多博文中都写了需要安装这个
一、新建一个类库项目
二、从nuget中直接安装 MySQL.Data.Entities, MySql.Data.Entity 会关联安装上 MYSQL.Data , EntityFramework 这些类库。 (nuget的推出确实方便了我们对于类库的管理,想起以前手动引用dll的日子是多么的艰苦和容易出错)
引用后如下图
三、 然后就可以建一个 DbContext的类了, 很简单的一个类
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MySqlCodeFirstDemo { public class MySqlContext : DbContext { public DbSet<User> Users { get; set; } } public class User { [Key] public int Id { get; set; } [MaxLength(255)] public string Name { get; set; } public int Age { get; set; } } }
在WebConfig中增加这一段
<connectionStrings> <add name="MySqlContext" providerName="MySql.Data.MySqlClient" connectionString="server=127.0.0.1;port=3306;database=mydb;uid=root;password=123456" /> </connectionStrings>
四,在nuget控制台中运行 Enable-Migrations 成功
在nuget控制台中运行add-migration Initial 失败
提示: No MigrationSqlGenerator found for provider 'MySql.Data.MySqlClient'
原因是mysql 不像sqlserver VS可以自动知道去找MigrationSqlGenerator, 而是需要手动指定,你只需要在Migrations文件夹的Configuration文件中增加这么一段
internal sealed class Configuration : DbMigrationsConfiguration<MySqlCodeFirstDemo.MySqlContext> { public Configuration() { AutomaticMigrationsEnabled = false; // register mysql code generator SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator()); } protected override void Seed(MySqlCodeFirstDemo.MySqlContext context) {这样就Ok了
然后在nuget控制台中运行update-database,看看能不能code first 成功呢,结果还是提示失败
你需要在DbContext中增加这段代码
namespace MySqlCodeFirstDemo { [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] public class MySqlContext : DbContext { public DbSet<User> Users { get; set; } } public class User { [Key] public int Id { get; set; } [MaxLength(255)] public string Name { get; set; }
再运行试试看,是不是成功了呢。
看看数据库中有没有? 果然有了呢。
相关文章推荐
- MySQL中的integer 数据类型
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复
- MySQL 优化
- MySQL 数据类型
- Facebook's New Real-time Messaging System: HBase to Store 135+ Billion Messages a Month