同様の問題が発生しましたが、何がカスケード削除の原因になっているのか分かりません。これらは、私のクラスである:EFとMVCによるデータベース作成後のインデックスビューのSQLエラー(カスケード削除問題)
public class Game
{
[Key]
public int GameID { get; set; }
public int GenreID { get; set; }
public int ConsoleID { get; set; }
public int CompanyID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime ReleaseDate { get; set; }
public Genre Genre { get; set; }
public Console Console { get; set; }
public Company Company { get; set; }
}
public class Console
{
[Key]
public int ConsoleID { get; set; }
public int CompanyID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public Company Company { get; set; }
}
public class Company
{
[Key]
public int CompanyID { get; set; }
public string Name { get; set; }
public List<Game> Games { get; set; }
public List<Console> Consoles { get; set; }
}
`
public class Genre
{
[Key]
public int GenreID { get; set; }
public int GenreTypeID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public List<Game> Games { get; set; }
public List<Movie> Movies { get; set; }
public List<Serie> Series { get; set; }
}
public class Movie
{
[Key]
public int ID { get; set; }
public int GenreID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime ReleaseDate { get; set; }
public Genre Genre { get; set; }
}
public class Serie
{
[Key]
public int SerieID { get; set; }
public int GenreID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime ReleaseDate { get; set; }
public Genre Genre { get; set; }
}
私はエラーを取得しています:FOREIGN KEY制約を紹介「FK_dbo.Games_dbo.Consoles_ConsoleID」テーブルの上に "Gamesのサイクルまたは複数のカスケードパスを引き起こす可能性があります。
私は、ゲームを削除するときにカスケードジャンル、企業やコンソールに削除を停止するには、以下のコメントを追加しました:いくつかの簡単なデータと私のデータベースをシードしようとしたとき
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Game>()
.HasRequired(x => x.Console)
.WithRequiredPrincipal()
.WillCascadeOnDelete(false);
modelBuilder.Entity<Game>()
.HasRequired(x => x.Genre)
.WithRequiredPrincipal()
.WillCascadeOnDelete(false);
modelBuilder.Entity<Game>()
.HasRequired(x => x.Company)
.WithRequiredPrincipal()
.WillCascadeOnDelete(false);
}
は今、私は次のエラーを取得する:{"The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_dbo.Consoles_dbo.Companies_CompanyID\". The conflict occurred in database \"GAMES_f8b82655d5bd4f0db9cee85535197d4c\", table \"dbo.Companies\", column 'CompanyID'.\r\nThe statement has been terminated."}
これは何を意味していますか?シードデータは次のとおりです。
Game game = new Game
{
GenreID = 1,
ConsoleID = 1,
CompanyID = 2,
Title = "Final Fantasy I",
Description = "Blabla",
ReleaseDate = new DateTime(1986, 1, 1)
};
db.Games.Add(game);
db.SaveChanges();
Game game2 = new Game
{
GenreID = 1,
ConsoleID = 2,
CompanyID = 2,
Title = "Final Fantasy VII",
Description = "Blabla",
ReleaseDate = new DateTime(1986, 2, 2)
};
db.Games.Add(game2);
db.SaveChanges();
Models.Console console = new Models.Console
{
CompanyID = 3,
Title = "NES",
ReleaseDate = new DateTime(2015, 1, 1)
};
db.Consoles.Add(console);
db.SaveChanges();
最後のSaveChangesを呼び出すとエラーが発生します。私はそれがこのidの会社がまだ存在しないためかもしれないと思った。しかし、Gameオブジェクトの外部キーについても同じことが言えます。また、エラーがスローされたオブジェクトを確認するために追加したすべてのオブジェクトの後にSaveChangesメソッドを追加しました。