使用 EF Code First Mysql

时间:2022-02-22 04:48:33

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

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

使用 EF Code First   Mysql

 

 

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

PM> Install-Package EntityFramework -Version 6.0.0

 

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

使用 EF Code First   Mysql

 

 

 

 

我这里引入的是 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 命名空间下都有哪些特性的定义;

使用 EF Code First   Mysql

 

 

 

下面是我创建的一个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

 

好了,记录完毕;