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

EF Core 7中不同列名的一对一表关系映射实现求助

EF Core Code First 一对一关联配置(不同列名)

1. 实体类定义

先确保你的实体类包含对应属性和导航属性(双向关联可选):

public class CompanyMap
{
    // 假设CompanyMap有自身主键,可根据实际调整
    public int Id { get; set; }
    public string AMLI_COMPANY { get; set; }

    // 导航属性:关联Companies实体
    public Companies Company { get; set; }
}

public class Companies
{
    // 以CompanyCode作为主键/唯一键
    public string CompanyCode { get; set; }
    // 其他业务属性示例
    public string CompanyName { get; set; }

    // 双向导航属性(可选,无需双向关联可删除)
    public CompanyMap CompanyMap { get; set; }
}

2. Fluent API 关联配置

在DbContext的OnModelCreating方法中,通过Fluent API明确配置一对一关系,指定外键和主方键:

public class YourDbContext : DbContext
{
    public DbSet<CompanyMap> CompanyMaps { get; set; }
    public DbSet<Companies> Companies { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // 配置CompanyMap与Companies的一对一关联
        modelBuilder.Entity<CompanyMap>()
            // 声明CompanyMap关联一个Companies实体
            .HasOne(cm => cm.Company)
            // 声明Companies关联一个CompanyMap实体(单向关联则改为.WithOne())
            .WithOne(c => c.CompanyMap)
            // 指定CompanyMap的外键为AMLI_COMPANY属性
            .HasForeignKey<CompanyMap>(cm => cm.AMLI_COMPANY)
            // 指定Companies的关联键为CompanyCode(非默认主键名称,必须显式声明)
            .HasPrincipalKey<Companies>(c => c.CompanyCode);

        // 若CompanyCode是Companies的主键,可补充配置:
        // modelBuilder.Entity<Companies>()
        //     .HasKey(c => c.CompanyCode);
    }
}

关键说明

  • HasForeignKey<CompanyMap>:指定依赖方(CompanyMap)的外键为AMLI_COMPANY,对应数据库列[AMLI_COMPANY]。
  • HasPrincipalKey<Companies>:指定主方(Companies)的关联键为CompanyCode,对应数据库列[CompanyCode]——因该键不是EF Core默认识别的Id类主键,必须显式声明。
  • 无需双向关联时,将.WithOne(c => c.CompanyMap)替换为.WithOne()即可。

内容的提问来源于stack exchange,提问作者Mark Richardson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:02:48