簡體   English   中英

實體框架核心 ForeignKeyAttribute 兩邊

[英]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屬性,我試圖確保保存到兩個表的數據完整性,因此沒有人創建帶有不存在的PurchasedPackagePurchasedPackageModifier ,反之亦然。

雖然這可以按要求工作,但我在日志中收到警告,說明如下:

'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 鏈接中的開發人員之一)

如果您真的想要“一對零或一的關系”,那么我將采用以下方法:

  • PurchasedPackagePurchasedPackageModifier沒有 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM