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。
添加后所有的依赖有:
<ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.16" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.16"/> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.16" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.16"/> </ItemGroup> |
添加数据库上下文
public class MyDbContext : DbContext { public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { } /// <summary> /// 重写父类的方法 用于连接数据库 /// </summary> /// <param name="optionsBuilder"></param> protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer("Data Source=.;database=CapDb;uid=sa;pwd=sa123456"); } } public DbSet<Sys_User> Users { get; set; } } |
添加实体类
Table("Sys_User")] public class Sys_User { public int Id { get; set; } /// <summary> /// 用户名 /// </summary> public string Name { get; set; } /// <summary> /// 手机号码 /// </summary> public string C_Mobile { get; set; } } |
接口项目
新建接口项目,命名为“Yak.EFCore.CodeFirst”。
添加DB项目引用:
在 Startup.cs 中,添加以下配置:
public void ConfigureServices(IServiceCollection services) {
services.AddControllers(); //添加数据库上下文服务 services.AddDbContext<MyDbContext>(); //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
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16205068.html
欢迎各位大佬们评论指正
QQ讨论群:610129902