基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入

  概述

  上一章,我们简单的搭建了依赖注入的三层架构,但是,没有真正的使用,而我们现在就使用MySQL数据,基于 EF Core 的 DbFirst 进行框架搭建。


  步骤

  1. 右击 Entity 项目,点击“管理NuGet程序包”

  

  2. 安装以下三个包

  • Microsoft.EntityFrameworkCore     安装版本:2.1.0
  • Microsoft.EntityFrameworkCore.Tools     安装版本:2.1.0
  • Pomelo.EntityFrameworkCore.MySql   安装版本:2.1.0-rc1-final,注意,由于当前这个最新稳定版还是2.0.1,如果安装了2.0.1,将会在数据库迁移中失败。因此应该在NuGet中勾选“包括预发行版”,安装最新的 2.1.0-rc1-final

  安装完成后,如下图所示

  

  3. 在 Entity -> DataTable 文件夹下,添加 BaseEntity.cs ,注意,这里的属性值不按照平时的Pascal命名规则,而是采用数据库命名设计原则去命名,相见参考链接二。

    public abstract class BaseEntity
    {
        public BaseEntity()
        {
            create_time = DateTime.Now;
        }

        /// <summary>
        /// DB版号,Mysql详情参考;http://www.cnblogs.com/shanyou/p/6241612.html
        /// </summary>
        //[Timestamp]//Mysql不允许byte[]类型上标记TimeStamp/RowVersion,这里使用DateTime类型配合标记ConcurrencyCheck达到并发控制
        [ConcurrencyCheck]
        public DateTime row_version { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime create_time { get; set; }
    }

BaseEntity

  

  4. 在 Entity -> DataTable 文件夹下,添加 DT_User.cs

    public class DT_User : BaseEntity
    {
        public DT_User()
        {

        }

        [DataMember]
        [Key]
        public long user_id { get; set; }

        [Required]
        [MaxLength(50)]
        [Description("用户名")]
        public string user_name { get; set; }

        [Required]
        [MaxLength(32)]
        [Description("密码")]
        public string user_password { get; set; }

    }

DT_User

  5. 在 Entity -> MyContext.cs 文件夹中,添加数据表

    public class MyContext : DbContext
    {
        public MyContext() : base()
        {

        }

        public MyContext(DbContextOptions<MyContext> options)
                    : base(options)
        {

        }

        override protected void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
        }

        #region 数据表

        public DbSet<DT_User> DT_User { get; set; }

        #endregion
    }

MyContext

  6. 在 Bll -> Interfaces 文件夹下,添加接口 IDT_UserService.cs,可以注意到

    public interface IDT_UserService : IBllService<DT_User>
    {
        /// <summary>
        /// 插入一个新对象
        /// </summary>
        /// <returns></returns>
        DT_User Insert();

        /// <summary>
        /// 获取用户数据表
        /// </summary>
        /// <returns></returns>
        IEnumerable<DT_User> GetList();
    }

IDT_UserService

 

  7. 在 Bll -> Implements 文件夹下,添加类 DT_UserService.cs

    public class DT_UserService : BllService<DT_User>, IDT_UserService
    {
        /// <summary>
        /// 用于实例化父级
        /// </summary>
        /// <param name="rep"></param>
        public DT_UserService(IDalService<DT_User> dal) : base(dal)
        {

        }

        public IEnumerable<DT_User> GetList()
        {
            return GetEntities(r => true);
        }

        public DT_User Insert()
        {
            DT_User user = new DT_User
            {
                user_name = "test-" + new Random().Next(10000),
                user_password = DateTime.Now.ToString()
            };
            return AddEntity(user, true);
        }
    }

DT_UserService

  8. 回到 Signup.cs 文件中,添加数据库注入依赖和业务类Service,以后每加一个业务类Service都必须在这里加入一个 services.AddTransient()

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // 配置数据库实体依赖注入
            services.AddDbContext<MyContext>(options => options.UseMySql(Configuration.GetConnectionString("MySqlConnection")));

            DIRegister(services);

            services.AddMvc();
        }

        // 配置依赖注入映射关系
        public void DIRegister(IServiceCollection services)
        {

            services.AddTransient(typeof(IDalService<>), typeof(DalService<>));

            services.AddTransient(typeof(IDT_UserService), typeof(DT_UserService));
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
        }

    }

Startup

  9. 在 appsettings.json 下,添加MySQL数据库连接字符串

{
  "ConnectionStrings": {
    "MySqlConnection": "Server=localhost;database=loda_demo;uid=root;pwd=123456;"
  },
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

appsettings.json

  

  10. 数据库设计完成,可以进行迁移了,进入“程序包管理控制台”

  

  11. 注意在默认项目中,切换到 Entity 项目,在输入框输入:add-migration init_1 ,注意,这里的 init_1 只是当前迁移的名字,当下一次数据库重新设计后,例如在DT_User中添加一个user_age属性,需要重新迁移,那么就需要输入 add-migration init_2 ,必须跟之前的名字不一样,名字随意起,当提示 “To undo this action, use Remove-Migration.”时,代表迁移成功,可以看到项目下多了一些文件。

  

  

  

  12. 继续输入 update-database ,以下就是操作成功的提示,我们可以打开MySQL数据库查看是否已经更新成功了。

  13. 最后,在 api 中进行测试,在 ValuesController.cs 中添加如下代码

[Route("api/[controller]")]
    public class ValuesController : Controller
    {
        private IDT_UserService _userService;

        public ValuesController(IDT_UserService userService)
        {
            //依赖注入得到实例
            _userService = userService;
        }

        public IActionResult Test()
        {
            _userService.Insert();

            return Ok(_userService.GetList().ToList());
        }
    }

ValuesController

  

  14. 运行程序,打开页面,得到结果,可以去数据库查看,也已经写入数据库了

  

  

  15. 最后附上框架文件图

  



  OK,基于EF Core 的 MySQL数据库迁移项目就到此结束了,如果有其他业务,可以依照上述DT_User,DT_UserService,IDT_UserService中扩展,有了模拟的用户数据,我们就要开始考虑如何进行用户验证了。下一章,我们将介绍使用 JWT 进行身份验证。

原文地址:https://www.cnblogs.com/loda7023link/p/9161834.html

时间: 2024-08-01 00:52:24

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入的相关文章

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(4) - EF Core CodeFirst 数据库创建

概述 在 基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入 一文中,我们介绍如何快速以CodeFirst快速搭建数据库,这一章,我们来完善一下创建数据库中可以添加的验证与约束. 微软爸爸官方文档:Entity Framework Core 数据库操作 (1) 数据库迁移  add-migration [任一名称,须唯一] (2) 更新数据库  update-database (3) 删除数据库迁

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(0) - 目录概述

概述 博主自毕业后,进公司就一直是以ASP.NET MVC 5.0 + MySQL 进行项目开发,在项目也使用了很多常用功能,如 WCF.SignalR.微信公众号API.支付宝API.Dapper等等,前端是大杂烩,如:Bootstrap.AmazeUI.EasyUI.Light7.WeUI等等.其实对于我们公司的项目来说,技术栈虽说不庞大,但五脏俱全,而且基于这一套技术,开发速度有保证.但是,作为一个有梦想的程序猿,必须与时俱进,因此无意中接触了.Net Core 2.0.听说它是开源的?它

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(1) - 依赖注入三层框架搭建

概述 本文章描述如何搭建 ASP.NET Core 2.0 WebAPI 依赖注入三层架构,为什么要加入依赖,并不是为了提供程序性能,而是为了项目间解耦,项目之间能够更加独立. 微软爸爸官方说明文档:在 ASP.NET Core 依赖注入 全面理解 ASP.NET Core 依赖注入 步骤 1. 新建解决方案,添加一个ASP.NET Core WebApi应用 2. 添加四个.Net Core类库:Entity.BLL.DAL.Common 3. 按照以下截图进行解决方案布局 4. 添加DAL层

ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介

参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-2.2&tabs=visual-studio 与https://www.jianshu.com/p/349e130e40d5 当一个WebApi完成之后,书写API文档是一件非常头疼的事,因为不仅要写得清楚,能让调用接口的人看懂,又是非常耗时耗力的一件事.在之前的一篇随笔中(

.Net Core 3.0 WebAPI && MySQL 8.0搭建详情

微软在2019年9月24日发布了dotNet Core 3.0和C# 8.0,添加了许多新Features,详情点我.无疑dotNet Core 3.0和一个月之后即将发布的dotNet Core 3.1对于dotNet来说是一个重要的里程碑. 对于MySQL而言,现在越来越多的商业公司使用MySQL来作为自己的主要数据库,虽然MySQL已经迎来了8.0的版本,有着更完善的数据能力,更好的性能,但是还是有很多公司在新项目上使用MySQL5.7.我在技术上很鄙视这样的做法,一旦使用的老技术Out

EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)

官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap 历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞.请大家多体谅! 下面正式进入主题: Entity Framework Core (EF Core) 下面是EF Core 的计划和技术线路,注意,这些计划是可能发现变化的,因为很多事是很难预测的.即便如此,我们还是尽可能保持计划的公开和透明,以解大家对EF Core期望,以及做出相应的安排. Sched

[转]EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)

本文转自:http://www.cnblogs.com/VolcanoCloud/p/5572408.html 官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap 历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞.请大家多体谅! 下面正式进入主题: Entity Framework Core (EF Core) 下面是EF Core 的计划和技术线路,注意,这些计划是可能发现变化的,因为很多事是很难预测

.NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入

作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9998021.html 写在前面 上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它,接着带着你一步一步的配置了.NET Core的开发环境并创建了一个ASP.NET Core的mvc项目,同时又通过一个实战教你如何在页面显示一个Content的列表.不知道你有没有跟着敲下代码,千万不要做眼高手低的人哦.这篇文章我们就会设计一些复杂的概念了,因为要对ASP.NET Core的启动及运行原

asp.net core 2.0 webapi集成signalr

在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.NET CORE貌似挺流行的,闲来无事也自己搞了个asp.net core signalr 博客园里面也有人在.net core 2.0下面集成了signalr,但是是集成在同一个项目里面的,但是大家都知道我们很多的项目都是分离的: 而且signalr涉及到连接数和内存资源的占用问题,如果都集成在一个项目里面当访问量多大的时候容易造成网站访问缓慢,具体原因就不多说了 所