概述
上一章,我们简单的搭建了依赖注入的三层架构,但是,没有真正的使用,而我们现在就使用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 classBaseEntity
{publicBaseEntity()
{
create_time=DateTime.Now;
}///
///DB版号,Mysql详情参考;/shanyou/p/6241612.html
///
//1714234055//Mysql不允许byte[]类型上标记TimeStamp/RowVersion,这里使用DateTime类型配合标记ConcurrencyCheck达到并发控制
[ConcurrencyCheck]public DateTime row_version { get; set; }///
///创建时间///
public DateTime create_time { get; set; }
}
BaseEntity
4.在 Entity -> DataTable 文件夹下,添加 DT_User.cs
public classDT_User : BaseEntity
{publicDT_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 classMyContext : DbContext
{public MyContext() : base()
{
}public MyContext(DbContextOptionsoptions)
:base(options)
{
}override protected voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)
{base.OnConfiguring(optionsBuilder);
}#region 数据表
public DbSet DT_User { get; set; }#endregion}
MyContext
6.在 Bll -> Interfaces 文件夹下,添加接口 IDT_UserService.cs,可以注意到
public interface IDT_UserService : IBllService{///
///插入一个新对象///
///
DT_User Insert();///
///获取用户数据表///
///
IEnumerableGetList();
}
IDT_UserService
7.在 Bll -> Implements 文件夹下,添加类 DT_UserService.cs
public class DT_UserService : BllService, IDT_UserService
{///
///用于实例化父级///
///
public DT_UserService(IDalService dal) : base(dal)
{
}public IEnumerableGetList()
{return GetEntities(r => true);
}publicDT_User Insert()
{
DT_User user= newDT_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 classStartup
{publicStartup(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 voidConfigureServices(IServiceCollection services)
{//配置数据库实体依赖注入
services.AddDbContext(options => options.UseMySql(Configuration.GetConnectionString("MySqlConnection")));
DIRegister(services);
services.AddMvc();
}//配置依赖注入映射关系
public voidDIRegister(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 voidConfigure(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 classValuesController : Controller
{privateIDT_UserService _userService;publicValuesController(IDT_UserService userService)
{//依赖注入得到实例
_userService =userService;
}publicIActionResult Test()
{
_userService.Insert();returnOk(_userService.GetList().ToList());
}
}
ValuesController
14.运行程序,打开页面,得到结果,可以去数据库查看,也已经写入数据库了
15.最后附上框架文件图
OK,基于EF Core 的 MySQL数据库迁移项目就到此结束了,如果有其他业务,可以依照上述DT_User,DT_UserService,IDT_UserService中扩展,有了模拟的用户数据,我们就要开始考虑如何进行用户验证了。下一章,我们将介绍使用 JWT 进行身份验证。
原文:/loda7023link/p/9161834.html
mysql core_基于 Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入...