我有一个使用EntityFramework 6的应用程序。
在应用程序的某些部分,我以这种方式更改了一个实体外部数据:
trabajador.Departamento = departamentoId == 0 ? null : await db.Departamento.FindAsync(departamentoId);其中,Departamento属性是与trabajador实体的相关实体相对应的对象。
看看那个三元运算符。
如果departamentoId变量为0,我需要删除关系,因此,我将null赋值给相关实体(将DB表中的底层外键设置为NULL )。如果departamentoId有一些数字(相关的实体id),我会对新对象执行一次FindAsync。
当通过其他Departamento实体更改Departamento实体时,它可以正常工作。但是,在分配null时,底层表字段未设置为NULL。
另一方面,如果我将该赋值更改为:
trabajador.DepartamentoId = departamentoId == 0 ? (int?)null : departamentoId;其中trabajador.DepartamentoId是EF创建的外键属性。这很好用。我可以更改外键,甚至可以将该外键设置为null,因为它可以为null。
为什么这在分配外键属性时有效,但在分配对象实体时无效?
谢谢詹姆
发布于 2021-02-12 12:23:53
可能的罪魁祸首不是在加载要更新的父级时立即加载关联的实体。
即。
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不会对更改跟踪构成更改。
https://stackoverflow.com/questions/66164420
复制相似问题