EFCore之CodeFirst更新数据库
2022/4/30 19:13:08
本文主要是介绍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文件夹,这个是项目的迁移记录。
结果
更新数据库,生成了外键、字段长度,必须等。
总结
若迁移数据库时出错,使用Remove-Migration移除迁移。
鸣谢
https://blog.csdn.net/zhang_adrian/article/details/100114115
源码
https://github.com/yandaniugithub/CAP
最后,欢迎各位大佬们评论指正
QQ讨论群:610129902
版权所有,转载请注明出处:
https://www.cnblogs.com/yakniu/p/16205068.html
这篇关于EFCore之CodeFirst更新数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享