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 不构成更改跟踪的更改。
我有一个应用程序使用 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 不构成更改跟踪的更改。