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
标签:CodeFirst,set,string,get,数据库,50,EFCore,public 来源: https://www.cnblogs.com/yakniu/p/16209877.html