【发布时间】: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