首页 > 技术文章 > EFCoreORM框架解析-代码先行-实体生成数据库

LZXX 2021-05-08 16:34 原文

  1. 新建EFcore项目创建数据库通过实体生成数据库
  2. 数据库迁移 表改动备份,还原  实体类生成数据库结构
  3. DBFirst-数据库结构生成实体类

 

1.新建EFcore项目  通过实体生成数据库

第一步:新建新的控制台程序

第二步:新增类文件 CustomDbContext,

添加相关引用 Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Text;
using Zhaoxi.NET5.EFCore.Client.Models;

namespace Zhaoxi.NET5.EFCore.Client
{

    /// <summary>
    /// nuget 引入:Microsoft.EntityFrameworkCore
    ///             Microsoft.EntityFrameworkCore.SqlServer
    /// 1.手动建立CustomDbContext,继承DbContext
    /// 2.声明链接字符串
    /// 3.添加两个方法:OnConfiguring(DbContextOptionsBuilder optionsBuilder)、OnModelCreating(ModelBuilder modelBuilder)
    /// 
    /// 
    /// 可以通过Context来生活成数据库
    /// </summary>
    public class CustomDbContext:DbContext
    {
        string ConnectionString =  "Server=.;Database=Net5DbInfoTest;Trusted_Connection=True;";

        //配置数据库链接
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(ConnectionString);//使用SqlServer的链接字符串 
        }
          
        public DbSet<Company> Company { get; set; } 
        public DbSet<SysLog> SysLog { get; set; }
        public DbSet<SysMenu> SysMenu { get; set; }
        public DbSet<SysRole> SysRole { get; set; }
        public DbSet<SysRoleMenuMapping> SysRoleMenuMapping { get; set; }
        public DbSet<SysUserRoleMapping> SysUserRoleMapping { get; set; }
         
        /// <summary>
        /// 配置数据库结构,关系映射
        /// 初始化的时候,一些配置
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
           
        }

    }
}

第三步:添加相关实体

namespace Zhaoxi.NET5.EFCore.Client.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
 

    [Table("SysLog")]
    public partial class SysLog
    {
        public int Id { get; set; }

        [Required]
        [StringLength(36)]
        public string UserName { get; set; }

        [Required]
        [StringLength(1000)]
        public string Introduction { get; set; }

        [StringLength(4000)]
        public string Detail { get; set; }

        public byte LogType { get; set; }

        public DateTime CreateTime { get; set; }

        public int CreatorId { get; set; }

        public DateTime? LastModifyTime { get; set; }

        public int? LastModifierId { get; set; }
    }
}
日志实体类

最后第四步:Main方法生出数据库

 #region 通过Api生成数据库-----CodeFirst;代码写好,生成数据库;
                using (CustomDbContext context = new CustomDbContext())
                {
                    ///生成数据库
                    context.Database.EnsureDeleted();//判断是否有数据库,如果有就删除
                    context.Database.EnsureCreated();//新建立一个数据库
                }
                #endregion
View Code

 

2.代码改动后,更新数据库表结构改动备份,还原

在开发过程中,可以存在很多需求变更;变化后,可能会伴随表结构的变化
可以为每一次变化,生成一个类似于版本的文件---迁移文件
1.Nuge引入程序包;Microsoft.EntityFrameworkCore.Design
         Microsoft.EntityFrameworkCore.Relational
         Microsoft.EntityFrameworkCore.Tools
2.工具--程序包管理器控制台--执行命令(请注意:默认项目 选择自己当前的项目):

 

3.具体操作步骤:

---生成一个Migrations文件夹 初始版本的类文件 

Add-migration Init001 -Context  CustomDbContext(自己写的链接数据库Dbcontext命名的类)

 

 

--可回滚,更新数据库表结构,先删除后更新表结构:

Update-Database "需要更新那个版本的类结构明(如:20210508080034_Init001)" -Context CustomDbContext 

3.如果实体类改动了,就需要使用 Add-migration "改动后的版本命名"-Context CustomDbContext(context命名的类) 记录改动过的表结构然后执行更新语句

 

3.DBFirst-数据库表结构生成实体类和context,已存在的实体不会被覆盖

添加引用

 

 

2.工具--程序包管理器控制台--执行命令(请注意:默认项目 选择自己当前的项目):

Scaffold-DbContext -Connection "Server=.;Database=Net5DbInfoTest;uid=sa;pwd=123“ Microsoft.EntityFrameworkCore.SqlServer -OutputDir "输入文件名“

 

4.剩下就是  业务层 实体层分层,通过contenxt来进行相关操作,最后可以设置一下进行数据库的读写分离

推荐阅读