Соответствует ли эта модель данных моим требованиям? - PullRequest
0 голосов
/ 24 октября 2018

Я создаю приложение Razor Pages, которое напоминает «хоккейную лигу».Поскольку я все еще понимаю концепцию внешних / первичных ключей, я не совсем уверен, правильно ли я настраиваю свою модель данных.После попытки обновить мою базу данных после миграции я получаю следующую ошибку, которая заставляет меня поверить, что я не настроил их правильно:

Введение ограничения FOREIGN KEY 'FK_Team_Division_DivisionID' в таблице 'Team'может вызвать циклы или несколько каскадных путей.Укажите «УДАЛИТЬ НЕТ ДЕЙСТВИЙ» или «ОБНОВИТЬ НЕТ ДЕЙСТВИЙ» или измените другие ограничения «ИНОСТРАННЫЙ КЛЮЧ».

Исходя из этих трех сущностей, я явно что-то не так делаю?

public class Team
{
    public int ID { get; set; }
    public int? CoachID { get; set; }
    public int? DivisionID { get; set; }
    public int? ConferenceID { get; set; }

    [Display(Name = "Team")]
    public string TeamName { get; set; }

    [Display(Name = "Location")]
    public string TeamLocation { get; set; }

    public Coach Coach { get; set; }
    public Division Division { get; set; }
    public Conference Conference { get; set; }

    public ICollection<Player> Players { get; set; }
}

public class Conference
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }

    [Display(Name = "Conference")]
    public string ConferenceName { get; set; }

    public ICollection<Division> Divisions { get; set; }
    public ICollection<Team> Teams { get; set; }        
}

public class Division
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }
    public int ConferenceID { get; set; }

    [Display(Name = "Division")]
    public string DivisionName { get; set; }

    public Conference Conference { get; set; }

    public ICollection<Team> Teams { get; set; }

}

Мойидея заключается в том, что каждый Team будет принадлежать Conference и Division.Может быть много Teams в Division и много Divisions в Conference.

1 Ответ

0 голосов
/ 24 октября 2018

Проблема, с которой вы сталкиваетесь, заключается в том, что SQL-сервер не знает, как обрабатывать Delete элемента, который имеет несколько родителей.Вам нужно будет немного помочь.Выберите маршрут, по которому вы хотите удалить Team, например:

Conference --> Division --> Team

Затем вы должны определить маршруты, по которым вы не хотите удалить его,например:

Conference --> Team

Как только вы решили, какие маршруты не будут использоваться для удаления, вы можете указать его в методе OnModelCreating(DbModelBuilder modelBuilder) для вашего контекста

modelBuilder.Entity<Conference>() 
    .HasRequired(x => x.Team)     
    .WithMany()
    .WillCascadeOnDelete(false);

РЕДАКТИРОВАТЬ

Уверен, что я получил это назад, попробуйте это:

modelBuilder.Entity<Team>() 
    .HasRequired(x => x.Conference)     
    .WithMany()
    .WillCascadeOnDelete(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...