删除导致FK异常的行后,EF6始终为FK异常

时间:2018-09-26 09:31:09

标签: entity-framework-6

我在项目中使用WPF和EF6。

我有2个表city(id_city,city_name)和person(id_person,name,id_city),person表中的id_city是FK。

示例我有2个城市C1和C2,并且1个人P1生活在城市C1中。 然后我尝试使用此代码删除C1

//I selected city C1 row in datagrid
city o = (city)cityDataGrid.SelectedCells[0].Item;
try
{
    context.city.Remove(o);
    context.SaveChanges();
}
catch (Exception ex)
{
    Console.WriteLine(ex.ToString());
}

它显然引发了FK例外。然后我尝试像这样删除C2,尽管C2没有任何人,但它引发了FK异常。 那我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

使用默认设置,这将始终导致异常-人员记录的id_city字段必须指向城市表中的有效记录。

要更改此

  1. 更改person.id_city字段以允许使用空值
  2. 将外键定义更改为“ on delete set null”

这假设您不想仅由于删除城市而删除人记录。

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-table-constraint-transact-sql?view=sql-server-2017

答案 1 :(得分:0)

我问了一个关于DbContext .Add()的问题后,我得知我应该像这样更改代码:

//I selected city C1 row in datagrid
city o = (city)cityDataGrid.SelectedCells[0].Item;
using (var context = new myDbContext())
{
    try
    {
        context.city.Remove(o);
        context.SaveChanges();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

此问题的解释是Entity Framework Insert bug?