Saya sudah bergumul dengan hal ini untuk sementara waktu dan tidak tahu apa yang terjadi. Saya memiliki entitas Kartu yang mengandung Sisi (biasanya 2) - dan kedua Kartu dan Sisi memiliki Panggung. Saya menggunakan migrasi EF Codefirst dan migrasi gagal dengan kesalahan ini:
Memperkenalkan kendala KUNCI ASING 'FK_dbo.Sides_dbo.Cards_CardId' pada tabel 'Sisi' dapat menyebabkan siklus atau beberapa jalur kaskade. Tentukan HAPUS TANPA TINDAKAN atau DIPERBARUI TANPA TINDAKAN, atau ubah batasan KUNCI ASING lainnya.
Inilah entitas Kartu saya :
public class Card
{
public Card()
{
Sides = new Collection<Side>();
Stage = Stage.ONE;
}
[Key]
[Required]
public virtual int CardId { get; set; }
[Required]
public virtual Stage Stage { get; set; }
[Required]
[ForeignKey("CardId")]
public virtual ICollection<Side> Sides { get; set; }
}
Ini milik saya entitas sisi :
public class Side
{
public Side()
{
Stage = Stage.ONE;
}
[Key]
[Required]
public virtual int SideId { get; set; }
[Required]
public virtual Stage Stage { get; set; }
[Required]
public int CardId { get; set; }
[ForeignKey("CardId")]
public virtual Card Card { get; set; }
}
Dan ini milik saya entitas Panggung :
public class Stage
{
// Zero
public static readonly Stage ONE = new Stage(new TimeSpan(0, 0, 0), "ONE");
// Ten seconds
public static readonly Stage TWO = new Stage(new TimeSpan(0, 0, 10), "TWO");
public static IEnumerable<Stage> Values
{
get
{
yield return ONE;
yield return TWO;
}
}
public int StageId { get; set; }
private readonly TimeSpan span;
public string Title { get; set; }
Stage(TimeSpan span, string title)
{
this.span = span;
this.Title = title;
}
public TimeSpan Span { get { return span; } }
}
Apa yang aneh adalah bahwa jika saya menambahkan yang berikut ke kelas Stage saya:
public int? SideId { get; set; }
[ForeignKey("SideId")]
public virtual Side Side { get; set; }
Migrasi berjalan dengan sukses. Jika saya membuka SSMS dan melihat tabel, saya bisa melihatnyaStage_StageId
telah ditambahkan ke Cards
(seperti yang diharapkan / diinginkan), namun Sides
tidak mengandung referensi ke Stage
(tidak diharapkan).
Jika saya tambahkan
[Required]
[ForeignKey("StageId")]
public virtual Stage Stage { get; set; }
public int StageId { get; set; }
Untuk kelas sampingku, begitu StageId
kolom ditambahkan ke Side
meja saya .
Ini berfungsi, tetapi sekarang di seluruh aplikasi saya, referensi apa pun yang Stage
mengandung SideId
, yang dalam beberapa kasus sama sekali tidak relevan. Saya ingin memberikan properti Card
dan Side
entitas saya Stage
berdasarkan kelas Stage di atas tanpa mencemari kelas stage dengan properti referensi jika memungkinkan ... apa yang saya lakukan salah?
DeleteBehavior.Restrict
atau DeleteBehavior.SetNull
.
Side
Class tambahkan integer Nullable dan hapus[Required]
atribut =>public int? CardId { get; set; }