当我使用实体框架保存一个实体时,我自然而然地假定它只会尝试保存指定的实体。但是,它也试图保存该实体的子实体。这导致了各种各样的诚信问题。如何强制 EF 只保存要保存的实体,从而忽略所有子对象?
如果我手动将属性设置为 null,就会得到一个错误“操作失败: 关系无法更改,因为一个或多个外键属性不能为空。”这是非常适得其反的,因为我特别将子对象设置为 null,这样 EF 就不会去管它了。
为什么我不想保存/插入子对象?
由于在评论中反复讨论这个问题,我将给出一些理由,说明为什么我希望我的子对象独自存在。
在我正在构建的应用程序中,EF 对象模型不是从数据库中加载的,而是用作数据对象,我在解析平面文件时填充这些对象。对于子对象,其中许多引用了定义父表的各种属性的查找表。例如,主实体的地理位置。
由于我自己已经填充了这些对象,因此 EF 假定这些对象是新对象,需要与父对象一起插入。但是,这些定义已经存在,我不想在数据库中创建副本。我只使用 EF 对象进行查找并填充主表实体中的外键。
即使子对象是真实的数据,我也需要首先保存父对象并获得一个主键,否则 EF 似乎会把事情搞得一团糟。希望这能给你一些解释。