EntityFramework 中的数据库 table 外键未设置为空

Database table foreign key in EntityFramework is not set to null

我有一个应用程序使用 EntityFramework 6.

在应用程序的某些部分,我正在以这种方式更改实体外部数据:

trabajador.Departamento = departamentoId == 0 ? null : await db.Departamento.FindAsync(departamentoId);

其中 Departamento属性 是对应于 trabajador 实体的相关实体的对象。

看看那个三元运算符。

如果 departamentoId 变量为 0 我需要删除关系,因此,我将 null 分配给相关实体(将数据库中的基础外键设置为 NULL table).如果 departamentoId 有一些数字(相关的实体 ID),我执行 FindAsync 来评估新对象。

当用其他 Departamento 实体更改 Departamento 实体时,它有效。但是,在分配 null 时,基础 table 字段未设置为 NULL。

另一方面,如果我将该作业更改为:

trabajador.DepartamentoId = departamentoId == 0 ? (int?)null : departamentoId;

其中 trabajador.DepartamentoId 是由 EF 创建的外键 属性。这非常有效。我可以更改外键,甚至可以将该外键设置为空,因为它可以为空。

为什么在分配外键时有效 属性 而在分配对象实体时却无效?

谢谢 海梅

可能的罪魁祸首是在加载要更新的父级时没有预先加载关联的实体。

var trabajador = context.Trabajadors
    .Include(x => x.Departamento)
    .Single(x => x.TrabajadorId == trabajadorId);

trabajador.Departamento = departamentoId == 0 
    ? null 
    : await db.Departamento.FindAsync(departamentoId);

为了能够删除现有关联,您需要确保已预加载该关联。否则为#null,将其设置为#null 不构成更改跟踪的更改。