簡體   English   中英

如何在一個表中創建兩個指向某個表中同一列的外鍵?

[英]How to Create two Foreign Keys in one Table pointing to the same Column in some table?

我有一個我要實現的數據庫設計,這很困難,並出現錯誤“有多個ForeignKeyAttributes指向相同的屬性集”

我們有一個機場和一個航班,一個航班有一個外鍵指向要飛行的機場,另一個有外鍵指向該航班要去的機場。

但兩個機場都在同一張表中。 Flight表中有兩個外鍵指向Airport表中的同一列

機場艙

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

    [ForeignKey(nameof(Flight.ToAirportId))]
    public ICollection<Flight> ComingFlightsId { get; set; }

    [ForeignKey(nameof(Flight.FromAirportId))]
    public ICollection<Flight> GoingFlightsId { get; set; }
}}

飛行艙

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

    [ForeignKey(nameof(FromAirportId))]
    public Airport FromAirport { get; set; }
    public int FromAirportId { get; set; }

    [ForeignKey(nameof(ToAirportId))]
    public Airport ToAirport { get; set; }
    public int ToAirportId { get; set; }
}}

只需使用這個:

public class Airport
{
  public int Id { get; set; }

  [InverseProperty("FromAirport")]
  public ICollection<Flight> ComingFlights { get; set; }

  [InverseProperty("ToAirport")]
  public ICollection<Flight> GoingFlights { get; set; }
}


public class Flight
{
   public int Id { get; set; }

   public int FromAirportId { get; set; }

   public int ToAirportId { get; set; }

   [ForeignKey(nameof(FromAirportId))]
   [InverseProperty("ComingFlights")]
   public Airport FromAirport { get; set; }


   [ForeignKey(nameof(ToAirportId))]
   [InverseProperty("GoingFlights")]
   public Airport ToAirport { get; set; }    
 }

我找到了問題的答案。 逆屬性

將此注釋添加到ICollection

這就是我的機場班級的樣子

{
public class Airport
{
    [Key]
    public int Id { get; set; }
    public string Locatoin { get; set; }


    [InverseProperty(nameof(Flight.ToAirportId))]
    public ICollection<Flight> ComingFlightsId { get; set; }

    [InverseProperty(nameof(Flight.FromAirportId))]
    public ICollection<Flight> GoingFlightsId { get; set; }
}}

嘗試在public ICollection<Flight> ComingFlightsId { get; set; }上使用virtual修飾符public ICollection<Flight> ComingFlightsId { get; set; } public ICollection<Flight> ComingFlightsId { get; set; } public ICollection<Flight> ComingFlightsId { get; set; }public ICollection<Flight> GoingFlightsId { get; set; } public ICollection<Flight> GoingFlightsId { get; set; } public ICollection<Flight> GoingFlightsId { get; set; }然后從其中刪除ForeignKey屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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