实体框架6.1.3将外键映射到非主键

stb*_*stb 9 c# entity-framework-6

目标是使用GravityZone中的所有字段以及来自Zone表的区域名称的API.我已经尝试了以下代码的几种排列而没有成功.它目前为区域提供null,我希望将该名称作为字符串或对象的一部分.我正在使用我无法修改的现有表.

楷模:

public partial class Zone
{
    [Key]
    [Column("ZONE_ID")]
    public decimal ZoneId { get; set; }

    [Column("ZONE_CODE")]
    public decimal ZoneCode { get; set; }

    [Column("ZONE_NAME")]
    public string ZoneName { get; set; }

    public virtual ICollection<GravityZone> GravityZones { get; set; }
}

public partial class GravityZone
{
    [Key]
    [Column("GRAVITY_ID")]
    public decimal GravityZoneId { get; set; }

    [Column("ZONE_CODE")]
    public decimal ZoneCode { get; set; }

    [Column("ELEVATION")]
    public decimal Elevation { get; set; }

    [Column("REMARK")]
    [StringLength(2000)]
    public string Remark { get; set; }

    public virtual Zone Zone { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

上下文(仅关系部分)

modelBuilder.Entity<Zone>()
    .HasKey(e => e.ZoneCode);

modelBuilder.Entity<GravityZone>()
    .HasRequired(e => e.Zones);
Run Code Online (Sandbox Code Playgroud)

除了这部分之外,其他所有内容都很棒:

"Zones":null,

Eri*_*ikE 12

现在可以在Entity Framework 7(即EF Core 1.0)中实现.

来自.Net Entity Framework用户语音唯一约束(即候选键)支持:

EF Core 1.0中添加了对此功能的支持,我们没有计划将其添加到EF6代码库中.