您的位置:首页 > 数据库 > MySQL

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的日子是多么的艰苦和容易出错)



引用后如下图



三、 然后就可以建一个 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; }


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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息