EFCore之CodeFirst更新数据库
EFCore之CodeFirst更新数据库
前言
今天小区由封控区变为管控区了,但是疫情还很严重,几天又有2W阳性,目前为止上海都有50多W阳性病例了,好了,不多少说了,言归正传,在上节“EFCore之CodeFirst模式”了解了CodeFirst,这节主要讲述CodeFirst更新数据库,设置主键、外键和字符串长度。
环境
l Win10
l VS2022
l .NET5.0
项目实践
在“EFCore之CodeFirst模式”的代码基础上继续改造。增加一对多的关系,项目如下:
四个包说明如下:
1、Microsoft.EntityFrameworkCore ef core的核心包 2、Microsoft.EntityFrameworkCore.Design 延迟加载实现包 3、Microsoft.EntityFrameworkCore.Tools 工具扩展包 4、Microsoft.EntityFrameworkCore.SqlServer sqlserver 数据库驱动包 |
DB项目
Step1: 修改用户Sys_User类
实体类中用注解的方式进行了相关映射,
l
Table 对应数据库表名
l Key 主键
l DatabaseGenerated.Identity 数据库自动增长列
l Required 非空
[Table("Sys_User")] public class Sys_User { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } /// <summary> /// 用户名 /// </summary> [MaxLength(50), Required] public string Name { get; set; } /// <summary> /// 密码,长度50 /// </summary> [MaxLength(50), Required] public string Password { get; set; } /// <summary> /// 手机号码 /// </summary> public string Mobile { get; set; } public virtual ICollection<Sys_UserInfoDetails> UserInfoDetails { get; set; } }
|
Step2: 添加用户详情Sys_UserInfoDetailsr类
增加一对多关系,只需要增加:
public virtual ICollection<Sys_UserInfoDetails> UserInfoDetails { get; set; }
[Table("Sys_User")] public class Sys_User { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } /// <summary> /// 用户名 /// </summary> [MaxLength(50), Required] public string Name { get; set; } /// <summary> /// 密码 /// </summary> [MaxLength(50), Required] public string Password { get; set; } /// <summary> /// 手机号码 /// </summary> public string Mobile { get; set; } public virtual ICollection<Sys_UserInfoDetails> UserInfoDetails { get; set; } }
|
Step3:修改数据库上下文MyDbContext类
增加集合和映射关系
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"); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Sys_User>(entity => { entity.Property(t => t.Password).HasDefaultValue("123456"); }); modelBuilder.Entity<Sys_UserInfoDetails>(entity => { entity.HasOne(t => t.Userinfo) .WithMany(t => t.UserInfoDetails) .HasForeignKey(t => t.UserId); //外键 });
} public DbSet<Sys_User> Users { get; set; } public DbSet<Sys_UserInfoDetails> UserInfoDetails { get; set; }
} |
迁移数据库
在程序包管理器控制台中输入迁移命令:
add-migration AddUserDetails update-database AddUserDetails |
执行完之后项目会多一个Migrations文件夹,这个是项目的迁移记录。
结果
更新数据库,生成了外键、字段长度,必须等。
总结
如果Migration还没有应用到数据库可以直接回退,使用Remove-Migration移除迁移。如果已经应用到数据库但是没有重要数据,可以直接删除数据库以及项目中的Migrations文件夹,然后按一开始的创建重新走一遍就好了。
鸣谢
https://blog.csdn.net/zhang_adrian/article/details/100114115
源码
https://github.com/yandaniugithub/CAP
最后,欢迎各位大佬们评论指正
QQ讨论群:610129902
版权所有,转载请注明出处:
https://www.cnblogs.com/yakniu/p/16205068.html
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16209877.html
欢迎各位大佬们评论指正
QQ讨论群:610129902
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理