EFCore之CodeFirst模式
EFCore之CodeFirst模式
前言
EF Core有两种数据库设计模式,DBfirst 数据库优先、Codefirst 代码优先。
我们一般设计是先添加数据库表信息,然后将数据库的信息更新到项目实体中。这种做法就是我们的DBfirst模式。
使用codefirst模式,我们就可以先创建表实体,添加字段限制,执行两条命生成数据库。
l 代码迁移:Add-Migration
l 数据库更新:update-database
环境
l Win10
l VS2022
l .NET5.0
CodeFirst介绍
先引用基本EF Core的基本类库、再然后创建一个数据库上下文,添加实体,执行迁移语句就生成数据库了。
若连接SQLServer数据库,引用下面包,其他数据库一样的操作,只是引用的包不一样。
|
1、Microsoft.EntityFrameworkCore 2、Microsoft.EntityFrameworkCore.Design 3、Microsoft.EntityFrameworkCore.Tools 4、Microsoft.EntityFrameworkCore.SqlServer |
若MySQL:
|
1、Microsoft.EntityFrameworkCore 2、Microsoft.EntityFrameworkCore.Design 3、Microsoft.EntityFrameworkCore.Tools 4、Pomelo.EntityFrameworkCore.MySql |
项目实践
实现功能是通过EFCore的codeFirst生成数据库和表。项目如下:
新建项目
新建两个项目
DB项目:“Yak.EFCore.DB”
接口项目:“Yak.EFCore.CodeFirst”
DB项目
DB项目用于访问数据库,这里使用SQLserver2012。
添加后所有的依赖有:
|
|
添加数据库上下文
|
public class MyDbContext : DbContext { public MyDbContext(DbContextOptions : base(options) { } /// /// 重写父类的方法 用于连接数据库 /// /// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer("Data Source=.;database=CapDb;uid=sa;pwd=sa123456"); } } public DbSet } |
添加实体类
|
Table("Sys_User")] public class Sys_User { public int Id { get; set; } /// /// 用户名 /// public string Name { get; set; } /// /// 手机号码 /// public string C_Mobile { get; set; } } |
接口项目
新建接口项目,命名为“Yak.EFCore.CodeFirst”。
添加DB项目引用:
在 Startup.cs 中,添加以下配置:
|
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); //添加数据库上下文服务 services.AddDbContext //services.AddSwaggerGen(m => //{ // m.SwaggerDoc("v1", new OpenApiInfo() { Title = "swaggertest", Version = "v1" }); //}); services.AddCors(m => m.AddPolicy("any", a => a.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader())); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseAuthorization(); //app.UseSwagger(); app.UseCors(); //app.UseSwaggerUI(m => { // m.SwaggerEndpoint("/swagger/v1/swagger.json", "swaggertest"); //}); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } |
迁移数据库
在程序包管理器控制台中输入迁移命令:
|
add-migration init -Context MyDbContext update-database -Context MyDbContext |
执行完之后项目会多一个Migrations文件夹,这个是项目的迁移记录。
结果
生成的数据库。
总结
若一个数据库上下文对象时,可以:
add-migration init
update-database
鸣谢
https://blog.csdn.net/weixin_41472521/article/details/113733580
https://blog.csdn.net/zhang_adrian/article/details/100114115l
源码
https://github.com/yandaniugithub/NETCore
最后,欢迎各位大佬们评论指正
QQ讨论群:610129902
版权所有,转载请注明出处:
https://www.cnblogs.com/yakniu/p/16205068.html