Я хочу удалить сообщение, но получаю исключение SqlException:
The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.Adresler_dbo.Kisi_Kisi_ID". The conflict occurred in database "TestDb", table "dbo.Adresler", column 'Kisi_ID'. The statement has been terminated.
[Table("Kisi")]
public class Kisiler
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[StringLength(20),Required]
public String Ad { get; set; }
[StringLength(20),Required]
public String Soyad { get; set; }
[Required]
public int Yas { get; set; }
public virtual List<Adresler> Adresler { get; set; }
}
[Table("Adresler")]
public class Adresler
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[StringLength(300)]
public string AdresTanim { get; set; }
public virtual Kisiler Kisi { get; set; }
}
[HttpPost,ActionName("Sil")]
public ActionResult SilOk(int? kisiid)
{
if (kisiid != null)
{
DatabaseContext db = new DatabaseContext();
Kisiler kisi = db.dbSetKisiler.Where(x => x.ID == kisiid).FirstOrDefault();
Adresler adres = db.dbSetAdresler.Where(x => x.Kisi.ID == kisi.ID).FirstOrDefault();
db.dbSetKisiler.Remove(kisi);
db.dbSetAdresler.Remove(adres);
db.SaveChanges();
}
return RedirectToAction("Index", "Home");
}
Как мне это сделать?
Таким образом, ошибка сообщает вам, что у вас есть ссылочное ограничение. Это означает, что другая таблица ссылается на строку, которую вы пытаетесь удалить. Вам нужно найти это ограничение, определить, допустимо ли оно, а затем определить, какие действия вы хотите предпринять с этой строкой при удалении строки, на которую она ссылается. Есть много вариантов. Ссылка, предоставленная Эми, показывает, как запустить каскадное удаление в структуре сущностей. Здесь показано, как настроить его прямо в таблице sql: stackoverflow.com/questions/6260688/…


Возможный дубликат Оператор удаления конфликтует с ограничением ссылки