【问题标题】:Entity Framework Key Name on Parent Entity父实体上的实体框架键名
【发布时间】:2015-08-05 16:59:57
【问题描述】:

我的课程看起来像这样:

public class Signer
{
    [Key, Column(Order = 0)]       
    public Guid EntityUUID { get; set; }

    [Key, Column(Order = 1)]
    public Guid SignerUUID { get; set; }

    [ForeignKey("EntityUUID")]
    public virtual User User { get; set; }
}

public class User
{
    [Key]       
    public int Id { get; set; }

    public Guid? EntityUUID { get; set; }

    public virtual List<Signer> Signers { get; set; }
}

在尝试为此创建迁移时,EF 尝试将 User.Id 列设置为与 Signer 的关系的父级,但由于它们属于不同类型,因此失败。我需要做的是让 User.EntityUUID 成为关系的父级,但我找不到任何可以让我设置关系的父级的东西。我查看了 InverseProperty 属性,但这似乎对我的情况没有帮助。注释将是我的首选修复。有什么想法吗?

编辑: 一位同事声称目前 EF 无法做到这一点,有人可以确认吗?

【问题讨论】:

  • EF 没有问题,只是外键不是这样工作的。因为外键必须唯一标识另一个表中的一行,所以它必须引用这个表的主键,在你的例子中是Id
  • 该图可以帮助您了解您的确切需求。对于复杂的关系,使用 Fluent API 比使用 Data Annotations 更好。
  • @FlorianHaider,不正确(见stackoverflow.com/questions/2895219/…)。父表上的任何键都符合条件。
  • @MiroslavHolec,从 EF 6 开始,fluent API 中的几乎所有内容都在注释中。但不管怎样,你有一个流畅的 API 解决方案吗?
  • @DanJ 好的,我不知道。看来这可以在 MS SQL Server 上完成。无论如何,它还没有在 EF 中实现。尽管data.uservoice.com/forums/…,他们正在为 EF 7 开发此功能

标签: entity-framework ef-code-first code-first


【解决方案1】:

找到了这个,看起来它会在 EF 7 中出现,但目前不可用。 Alternate Keys in Entity Framework

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多