You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:24:05