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

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

这篇文章是介绍 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的日子是多么的艰苦和容易出错)


EntityFramework6 连接mysql数据库(code first模式)_第1张图片


引用后如下图


EntityFramework6 连接mysql数据库(code first模式)_第2张图片


三、 然后就可以建一个 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 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中增加这一段

  
    
  

四,在nuget控制台中运行 Enable-Migrations 成功

        在nuget控制台中运行add-migration Initial 失败

       提示: No MigrationSqlGenerator found for provider 'MySql.Data.MySqlClient'


    原因是mysql 不像sqlserver   VS可以自动知道去找MigrationSqlGenerator,    而是需要手动指定,你只需要在Migrations文件夹的Configuration文件中增加这么一段

EntityFramework6 连接mysql数据库(code first模式)_第3张图片

   internal sealed class Configuration : DbMigrationsConfiguration
    {
        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 Users { get; set; }
    }

    public class User
    {
        [Key]
        public int Id { get; set; }
        [MaxLength(255)]
        public string Name { get; set; }

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


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


EntityFramework6 连接mysql数据库(code first模式)_第4张图片

你可能感兴趣的:(.net)