This issue can be replicated easily, but I do not know the correct way to resolve it.
For example, you have a Team class and a Game class. Each Game has two Teams. When using standard OOTB EF naming conventions, you will run into the following error when running dotnet ef database update (dotnet ef migrations add will run without error).
Classes:
public class Team
{
[Required]
public int TeamID { get; set; }
public string TeamName { get; set; }
}
public class Game
{
[Required]
public int GameID { get; set; }
public int Team1ID { get; set; }
public Team Team1 { get; set; }
public int Team2ID { get; set; }
public Team Team2 { get; set; }
}
Make sure to add the two classes into your DbContext:
public virtual DbSet<Team> Teams { get; set; }
public virtual DbSet<Game> Games { get; set; }
The error I receive is:
Introducing FOREIGN KEY constraint 'FK_Games_Teams_Team2ID' on table 'Games' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
I have previously worked around this issue by making both Team1ID and Team2ID nullable. But, that is obviously not the appropriate solution. A Game cannot exist without having exactly two Teams (in this scenario... let's say it's a game of soccer). Also, a Team should not be able to be deleted if it's participating (or participated) in at least one Game.
What is the appropriate way to resolve this issue? And if it is specifying ON DELETE NOT ACTION or ON UPDATE NO ACTION, or modifying other FOREIGN KEY constraints, how do you do so?