【问题标题】:Entity Framework 6.1.3 Mapping Foreign key to non primary key实体框架 6.1.3 将外键映射到非主键
【发布时间】:2015-05-04 18:54:50
【问题描述】:

我们的目标是拥有一个 API,其中包含来自 GravityZone 的所有字段以及来自 Zone 表的区域名称。我已经尝试了以下代码的几种排列但没有成功。它目前正在为 Zone 提供 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; }
}

上下文(仅关系部分)

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

modelBuilder.Entity<GravityZone>()
    .HasRequired(e => e.Zones);

除了这部分,其他一切都很好:

"Zones":null,

【问题讨论】:

标签: c# entity-framework-6


【解决方案1】:

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

来自 .Net Entity Framework 用户语音Unique Constraint (i.e. Candidate Key) Support

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

【讨论】:

    【解决方案2】:

    我不认为这是可能的,因为它会造成很多麻烦。外键应始终指向表的某个键。我认为您无法将候选键告诉 EF。

    编辑:

    类似问题:Entity Framework 5.0 composite foreign key to non primary key - is it possible?

    这里是您问题的答案。正如我认为 EF 不理解除了主键之外的唯一性的概念。

    Entity Framework foreign keys to non-primary key fields

    【讨论】:

    • 那太糟糕了。在我整理好这个项目之前,还会有更多的抱怨。感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多