[英]Entity Framework Core ForeignKeyAttribute on both sides
我有一个带有 Entity Framework Core 的应用程序,在我的上下文中具有不同的实体,但是其中有两个需要一对零或一的关系。 我这样做并确保验证的方法是执行以下操作:
public class PurchasedPackage
{
public int Id { get; set; }
...
[ForeignKey(nameof(PurchasedPackageModifier))]
public int? PurchasedPackageModifierId { get; set; }
public virtual PurchasedPackageModifier PurchasedPackageModifier { get; set; }
}
和
public class PurchasedPackageModifier
{
public int Id { get; set; }
...
[Required]
[ForeignKey(nameof(PurchasedPackage))]
public int PurchasedPackageId { get; set; }
public virtual PurchasedPackage PurchasedPackage { get; set; }
...
}
其中PurchasedPackage
是必需的, PurchasedPackageModifier
是可选的。 通过在双方指定ForeignKey
属性,我试图确保保存到两个表的数据完整性,因此没有人创建带有不存在的PurchasedPackage
的PurchasedPackageModifier
,反之亦然。
虽然这可以按要求工作,但我在日志中收到警告,说明如下:
'PurchasedPackage.PurchasedPackageModifier' and 'PurchasedPackageModifier.PurchasedPackage' were separated into two relationships as ForeignKeyAttribute was specified on properties 'PurchasedPackageModifierId' and 'PurchasedPackageId' on both sides.
和
'PurchasedPackageModifier.PurchasedPackage' and 'PurchasedPackage.PurchasedPackageModifier' were separated into two relationships as ForeignKeyAttribute was specified on properties 'PurchasedPackageId' and 'PurchasedPackageModifierId' on both sides.
我的问题是:我这样做是否正确,在这种特殊情况下我应该忽略这些警告还是有更好的方法来实现相同的验证/完整性行为?
这个关于警告的问题已于 2018 年 4 月关闭。我现在确实用 mysql(pomelo lib) 尝试了你的两个课程,确实我得到了一个 FK。 因此,如果您可以接受这些警告,则可以忽略警告(引用该 github 链接中的开发人员之一)
如果您真的想要“一对零或一的关系”,那么我将采用以下方法:
PurchasedPackage
对PurchasedPackageModifier
没有 FK,我的意思是删除两个int? PurchasedPackageModifierId
int? PurchasedPackageModifierId
和导航属性urchasedPackageModifier PurchasedPackageModifier
- 这涵盖了 1-0 部分,其中PurchasedPackage
中的记录可以存在而不存在相应的PurchasedPackageModifier
PurchasedPackageModifier
有一个PurchasedPackage
列,它是PurchasedPackageId
的 FK,也是一个唯一索引 - 这涵盖了 1-1 部分,其中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.