使用 EF Code First + Mysql

Posted fubing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 EF Code First + Mysql相关的知识,希望对你有一定的参考价值。

这两天没事,研究EF 以往都是 连 mssql 微软亲儿子,换成了 mysql之后就问题百出,下面记录一下怎么使用 EF code first  +  mysql 数据库;

项目中,nuget先引入 EF 扩展 ;

技术图片

 

 

如果本地有EF扩展了,可以使用 程序包管理控制台安装,命令如下。

PM> Install-Package EntityFramework -Version 6.0.0

 

然后nuget 安装    MySql.Data.Entity  这个扩展是mysql用来支持 EF 的

技术图片

 

 

 

 

我这里引入的是 6.10.9 最新 版本 ;

引入扩展后,VS将自动生成了 配置文件 app.config;

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
      </provider>
    </providers>
  </entityFramework>
  <!-- 新增下方连接字符串 -->

<connectionStrings>
    <add name="DataAccess" connectionString="Datasource=127.0.0.1;port=3306;Database=zyturo;uid=root;pwd=fubing;" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
</configuration>

 

链接字符串的配置;

 <connectionStrings>
    <add name="DataAccess" connectionString="Datasource=127.0.0.1;port=3306;Database=zyturo;uid=root;pwd=fubing;" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

创建和数据库映射的关系实体类

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ZY.Tour.EntityFramework

    public class TB_Admin
    
        /// <summary>
        /// 管理员ID
        /// </summary>
        [Key]
        public Int32 Admin_ID  get; set; 
        /// <summary>
        /// 管理员登录账号
        /// </summary>
        [Required]
        public string Account  get; set; 
        /// <summary>
        /// 管理员登录密码
        /// </summary>
        [Required]

        public string Password  get; set; 
        /// <summary>
        /// 加密盐
        /// </summary>
        [Required]

        public string Salt  get; set; 
        /// <summary>
        /// 创建时间
        /// </summary>
        public Nullable<DateTime> CreateTime  get; set; 
        /// <summary>
        /// 帮助注册人的ID
        /// </summary>
        public Int32 ParentID  get; set; 
        /// <summary>
        /// 最后登录IP
        /// </summary>
        public string LastLoginIP  get; set; 

        /// <summary>
        /// 管理员所在部门ID
        /// </summary>
        public Int32 Department_ID  get; set; 
    

 

实体类属性上添加了 特性 (Attribute)  这块具体的说明可以参考 园友文章: https://www.cnblogs.com/dotnet261010/p/9111954.html

[Key] 表示主键,他是自动递增的 从0开始;

[Required] 表示不能为空 

 

需要了解更多特性标注使用类,可以在对象浏览器 看 System.ComponentModel.DataAnnotations 命名空间下都有哪些特性的定义;

技术图片

 

 

 

下面是我创建的一个DataAccess 类,用于操作数据库;

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ZY.Tour.EntityFramework

    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class DataAccess : DbContext
    
        public DataAccess() : base("name=DataAccess")
        
        
        public virtual DbSet<TB_Admin> Admin  get; set; 
    
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
在 DbContent类上添加了一条标注,用于声明为生成为 mysql 的数据类型;

至此就可以正常使用了,我搭建了一个单员测试项目,测试通过;

 public void TestMethod1()
        
            var da = new DataAccess();
            da.Admin.Add(new TB_Admin
            
                Account = "fubing",
                CreateTime = DateTime.Now,
                Password = "123123",
                Salt = "123123"
            );
            da.SaveChanges();
            Assert.IsTrue(true);
        

数据库被自动创建 并 创建 表和 数据了;

技术图片

 

 技术图片

 

好了,记录完毕;

 

 

 

 

以上是关于使用 EF Code First + Mysql的主要内容,如果未能解决你的问题,请参考以下文章

EF Code First Mysql 到 SQL Server

Mysql EF Code First

[EF]vs15+ef6+mysql code first方式

EF Code First 连接MySql

EF+Mysql+DDD框架搭建——code first准备

亲测Asp.net Mvc5 + EF6 code first 方式连接MySQL总结