.NET Core EF Code First 迁移如何指定自定义字段作为外键建立关联
解决方案
出现该问题是因为EF Core默认规则未识别到altKategori实体中手动定义的idAnaKategori字段是导航属性anaKategori对应的外键,因此自动生成了影子外键字段anaKategoriidAnaKategori,你可以通过以下两种方式实现自定义外键配置:
方案1:使用数据注解配置
直接在altKategori实体的导航属性上添加[ForeignKey]特性,指定关联的外键字段即可:
public class altKategori { [Key] public int idAltKategori { get; set; } [Column(TypeName = "Varchar")] [StringLength(30)] public string adAltKategori { get; set; } public int idAnaKategori { get; set; } // 新增特性,指定idAnaKategori为外键字段 [ForeignKey(nameof(idAnaKategori))] public anaKategori anaKategori { get; set; } }
方案2:使用Fluent API配置
在Context类中重写OnModelCreating方法,显式配置两个实体的关联关系和外键:
public class Context : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("server=.\\MSSQLSERVER2019;database=deneme;User ID=deneme1;Password=****;"); } // 重写模型创建方法配置关联规则 protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<anaKategori>() .HasMany(a => a.altKategoris) .WithOne(b => b.anaKategori) .HasForeignKey(b => b.idAnaKategori) // 可按需调整删除行为,可选值包括Cascade/NoAction/Restrict等 .OnDelete(DeleteBehavior.Restrict); } public DbSet<altKategori> altKategoris { get; set; } public DbSet<anaKategori> anaKategoris { get; set; } }
后续操作
配置完成后,删除之前生成的包含多余anaKategoriidAnaKategori字段的迁移文件,重新执行Add-Migration命令生成新的迁移,再执行Update-Database更新数据库即可生效。
内容的提问来源于stack exchange,提问作者Arin Oksas
相关产品推荐
相关产品推荐

