首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EntityFramework中的数据库表外键未设置为null

EntityFramework中的数据库表外键未设置为null
EN

Stack Overflow用户
提问于 2021-02-12 07:22:18
回答 1查看 23关注 0票数 0

我有一个使用EntityFramework 6的应用程序。

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

代码语言:javascript
运行
复制
trabajador.Departamento = departamentoId == 0 ? null : await db.Departamento.FindAsync(departamentoId);

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

看看那个三元运算符。

如果departamentoId变量为0,我需要删除关系,因此,我将null赋值给相关实体(将DB表中的底层外键设置为NULL )。如果departamentoId有一些数字(相关的实体id),我会对新对象执行一次FindAsync

当通过其他Departamento实体更改Departamento实体时,它可以正常工作。但是,在分配null时,底层表字段未设置为NULL。

另一方面,如果我将该赋值更改为:

代码语言:javascript
运行
复制
trabajador.DepartamentoId = departamentoId == 0 ? (int?)null : departamentoId;

其中trabajador.DepartamentoId是EF创建的外键属性。这很好用。我可以更改外键,甚至可以将该外键设置为null,因为它可以为null。

为什么这在分配外键属性时有效,但在分配对象实体时无效?

谢谢詹姆

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-12 12:23:53

可能的罪魁祸首不是在加载要更新的父级时立即加载关联的实体。

即。

代码语言:javascript
运行
复制
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不会对更改跟踪构成更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66164420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档