[英]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.