【发布时间】:2015-10-08 01:56:38
【问题描述】:
尝试通过 EF 6.1.1 插入新实体及其关系时出现以下错误。
注意
我已禁用延迟加载和代理创建。
无法更改关系,因为其中一项或多项 外键属性不可为空。当对某项进行更改时 关系,相关的外键属性设置为空值。 如果外键不支持空值,一个新的关系 必须定义,外键属性必须分配另一个 非空值,否则必须删除不相关的对象。
我已经仔细检查了所有的导航属性,它们都被考虑在内,而不是为空。
我还从对象图中删除了所有子实体,但仍然遇到相同的错误。与其他表/实体仍然存在 FK 关系,但我可以看到它们都已解决。 IE。在调用 AddObject 之后但在 SaveChanges 之前,我可以看到所有关系都已根据相关的 FK Id 得到解决/水合。不过,这些只是对现有数据的查找。
所以我不明白什么关系被设置为 null 以及为什么
我有其他实体可以正常保存,但这个特定实体无法正常工作。
我应该寻找什么?
如果有的话,我应该提供哪些更多信息来帮助解释问题?
编辑 1
已按照史蒂夫的建议和这篇文章https://msdn.microsoft.com/en-us/data/dn469464.aspx#Log.Logging 开启了登录,但生成的唯一语句是打开的连接,当我调用保存更改时,我没有生成其他语句。我也运行了 SQL Profiler,这里也没有生成语句!
编辑 2
这是相关表的数据库图。我尝试为其创建记录的主表是 WorkOrders 表。 Users、RefList、Employees 和 ActivePolicies 仅用于此上下文中的参考数据。
我通过分配 Id 属性而不是导航属性来设置 FK 属性。
它还应该将数据插入 WorkOrders、WorkOrderEmployees、WorkOrderEmployeeArtifacts、WorkOrderEmployeePolicies。虽然如果我 NOT 将这些添加到 WorkOrders 实体并且只创建没有子级的 WorkOrders 实体,我仍然会遇到相同的错误。
提前致谢, 皮特
【问题讨论】:
-
@SteveGreene 谢谢,但没有产生任何声明。 EF必须在保存之前进行一些内部检查吗?请参阅上面的编辑。
-
嗨@Pete,能否请您显示您的数据库图表以及您尝试在哪个表中添加数据。插入时如何分配外键关系?
-
@AbhilashPA。见编辑 2
-
设置关联可以“窃取”一个实体远离另一个实体,从而使现有外键无效。我认为这就是这里发生的事情。
标签: c# entity-framework