如何通过EF Core Code-First从单个类生成两张数据库表
如何通过EF Core Code-First生成users和userchanges两张表
问题原因
EF Core默认会将同一个实体类型users映射到单一数据库表,即便你定义多个DbSet<users>,它也不会自动生成新表——因为EF Core识别的是实体类型,而非DbSet的名称。
解决方法
方法一:创建继承实体类(推荐)
定义一个新的UserChanges类继承自users,无需额外属性:
public class UserChanges : users { // 继承父类所有字段,无需新增属性 }
在AppDbContext中添加对应的DbSet:
public DbSet<users> Users { get; set; } public DbSet<UserChanges> UserChanges { get; set; }
执行迁移命令生成新表:
- Package Manager Console:
Add-Migration AddUserChangesTable,再执行Update-Database - CLI命令:
dotnet ef migrations add AddUserChangesTable,再执行dotnet ef database update
方法二:用Fluent API配置多表映射
如果不想新增实体类,可在AppDbContext的OnModelCreating方法中,为同一个users实体配置两个独立表:
protected override void OnModelCreating(ModelBuilder modelBuilder) { // 将users实体映射到users表 modelBuilder.Entity<users>().ToTable("users"); // 将users实体映射到userchanges表 modelBuilder.Entity<users>().ToTable("userchanges"); }
完成配置后执行迁移命令,即可生成结构完全一致的两张表。
注意事项
- 方法一更符合EF Core的实体设计逻辑,后续扩展实体属性或新增业务逻辑时更灵活;
- 方法二生成的两张表结构完全同步,若修改
users实体的属性,迁移会同时更新两张表。
内容的提问来源于stack exchange,提问作者Hosein Ghasemi
相关产品推荐
相关产品推荐

