Как создать два внешних ключа в одной таблице, указывающих на один и тот же столбец в некоторой таблице? - PullRequest
0 голосов
/ 29 января 2019

У меня есть дизайн базы данных, который я хочу реализовать, который сложен и делает ошибку "было несколько атрибутов ForeignKeyAttributes, которые указывают на один и тот же набор свойств"

у нас есть аэропорт и рейсы, рейс естьвнешний ключ для аэропорта, из которого он летит, и другой внешний ключ для аэропорта, в который будет выполняться полет.

, но оба аэропорта находятся в одной таблице.Там для Таблицы полетов есть два внешних ключа, указывающие на один и тот же столбец в Таблице аэропортов

Класс аэропорта

{
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; }
}}

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Я нашел ответ на свой вопрос. Обратное свойство

добавить эту аннотацию к ICollection

так должно выглядеть класс Airport в моем случае

{
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; }
}}
0 голосов
/ 30 января 2019

Просто используйте это:

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; }    
 }
0 голосов
/ 29 января 2019

Попробуйте использовать модификатор virtual для public ICollection<Flight> ComingFlightsId { get; set; } и public ICollection<Flight> GoingFlightsId { get; set; } и удалите атрибут ForeignKey из них

...