EntityFramework6 连接mysql数据库(code first模式)

来源:互联网 发布:守望先锋添加数据索引 编辑:程序博客网 时间:2024/05/17 09:31

这是我第一篇技术文章,我是一个懒得动笔的人,不知道能不能坚持下去。

这篇文章是介绍 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; }

再运行试试看,是不是成功了呢。


看看数据库中有没有?  果然有了呢。



0 0
原创粉丝点击