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
相关产品推荐
相关产品推荐

