Две ошибки «Введение ограничения FOREIGN KEY» в таблице «могут вызвать циклы или несколько каскадных путей» одновременноC#

Место общения программистов C#
Ответить
Anonymous
 Две ошибки «Введение ограничения FOREIGN KEY» в таблице «могут вызвать циклы или несколько каскадных путей» одновременно

Сообщение Anonymous »

Я застрял в своем проекте курсовой работы на 2 недели, пытаясь обновить базу данных Sql с помощью миграций. Итак, по сути, я создаю приложение FPL, в котором пользователи могут создать свою команду (у которой есть модельное название Team, но это команда и другая модель клуба, что означает футбольный клуб, такой как «Челси»), состоящий из одного тренера и многих игроков. У пользователей или их команды, если быть точным, есть любимая команда, которая действует как значок игрока, она просто отображает Liverool или что-то еще, что они выбрали. Миграция проходит нормально, но при обновлении базы данных dotnet ef возникают ошибки. На данный момент есть следующие ошибки:

Ограничение FOREIGN KEY «FK_PlayerTeams_Teams_TeamId» в таблице «PlayerTeams» может вызывать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.


Введение ограничения FOREIGN KEY «FK_Team_Coach_CoachId» в таблице «Team» может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.

Я пытался создать таблицу слияния, например TeamCoach, но это привело к новой ошибке каскадирования. Сопоставление FluentApi ничего не изменило, я заставил ChatGpt переписать эту штуку сто раз, и он сказал: «Я знаю, что сейчас происходит, вот попробуй это», и это снова с треском провалилось. Вот классы:

Код: Выделить всё

public class Club
{
public int Id { get; set; }
public Coach Coach { get; set; } = null!;
public List
 Players { get; set; } = new();
public List FavoritedBy { get; set; } = new();
}

Код: Выделить всё

public class Coach
{
public int Id { get; set; }
public int ClubId { get; set; }
public Club Club { get; set; } = null!;
public List CoachOfTeams { get; set; } = new();
}

Код: Выделить всё

public class Player
{
public int Id { get; set; }
public int ClubId { get; set; }
public Club Club { get; set; } = null!;
public List Teams { get; set; } = new();
}

Код: Выделить всё

public class PlayerTeam
{
public int Id { get; set; }
public int PlayerId { get; set; }
public Player Player { get; set; } = null!;
public int TeamId { get; set; }
public Team Team { get; set; } = null!;
}

Код: Выделить всё

public class Team
{
public int Id { get; set; }
public string Name { get; set; } = null!;
public int FavoriteClubId { get; set; }
public Club FavoriteClub { get; set; } = null!;
public int CoachId { get; set; }
public Coach Coach { get; set; } = null!;
public List Players { get; set; } = new();
}

Код: Выделить всё

    public class AppDbContext : DbContext
{
public DbSet Clubs => Set();
public DbSet Coaches => Set();
public DbSet Players => Set();
public DbSet Teams => Set();
public DbSet PlayerTeams => Set();

protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer(
"Server=;Database=;Trusted_Connection=true;TrustServerCertificate=true");
}
}
Я даже готов использовать обходные методы, просто хочу наконец исправить это, чтобы наконец начать что-то делать.


Подробнее здесь: https://stackoverflow.com/questions/798 ... s-or-multi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»