Я использую подход Code First для создания базы данных в этой проблеме. У меня есть следующая (частичная) сущность:
public class Tournament {
public int TournamentID { get; set; }
public String Name { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
public int? SportID { get; set; }
public virtual Sport Sport { get; set; }
public virtual ICollection<Official> Officials { get; set; }
}
В официальном юридическом лице у меня есть это:
public class Official {
public int OfficialID { get; set; }
public String Surname { get; set; }
public String FirstName { get; set; }
public int? TournamentID { get; set; }
public virtual Tournament Tournament { get; set; }
public virtual ICollection<Match> Matches { get; set; }
}
Используя некоторые примеры данных и проверяя базу данных SQL Server, это работает так, как я и ожидал. Турнир имеет отношения один-ко-многим с официальными лицами.
Проблема, с которой я столкнулся, заключается в том, что я бы хотел, чтобы в турнире первичным ключом был официальный представитель. Поэтому я бы добавил к сущности Турнира:
public int? OfficialID { get; set; } // foreign key to official table
public virtual Official HeadOfficial { get; set; } // navigation property
Если я сделаю это, я получу атрибут OfficialID и HeadOfficial_OfficialID в моей таблице Турнира, и я получу TournamentID, Tournament_TournamentID и Tournament_TournamentID1 в моей таблице Официальных лиц. Я понимаю, что теперь у меня не только отношения один-ко-многим между Турниром и Официальным (поскольку в турнире может быть много официальных лиц), но и отношения один-к-одному (поскольку в турнире может быть только одна голова официальный).
Как я могу исправить эту проблему?