【发布时间】:2016-03-04 14:23:32
【问题描述】:
我在 .NET 4.5 应用程序中使用 Entity Framework 6.1.3,并在 Oracle 数据库服务器上使用 Code First 和手工制作的表模式。大多数事情都很好。对于新函数,SaveChanges 中会引发以下异常:
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
堆栈跟踪:
- System.Data.Entity.Core.Objects.ObjectContext.PrepareToSaveChanges(System.Data.Entity.Core.Objects.SaveOptions)
- System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(System.Data.Entity.Core.Objects.SaveOptions, bool)
- System.Data.Entity.Internal.InternalContext.SaveChanges()
- (我的代码)
它没有说明问题。它没有帮助我找到它。 SQL 日志是空的,所以我猜 EF 甚至在尝试访问数据库之前就已在本地检测到问题。
我的问题是:我该如何调试这个东西?关于哪个对象中的哪个外键具有哪个值但不应该有的详细信息在哪里?是否有可用于 Entity Framework 的跟踪日志,其中包含有关已完成操作的内部数据?
这里的情况太复杂了,所以请不要在这里展示它。我想帮助自己解决这个问题,我只需要帮助。
【问题讨论】:
-
如果您在调试模式下使用Linq to Entities,您可以查看生成的SQL。请发布失败的代码,因为我们无法为您提供这些信息。
-
同时发布您的模型类
-
跟进詹姆斯的建议。 blogs.msdn.com/b/mpeder/archive/2014/06/16/… 如果您查看 SQL(听起来会非常复杂),您应该能够看到一些 FK 被设置为 NULL
-
没有SQL,那个日志已经就位,没有写任何东西。该错误发生在我所看到的甚至生成 SQL 之前。模型类对此太长并且可能是机密的。由于我不知道哪些课程受到影响,所以我不知道该发布什么。您不想调试我的整个应用程序。我只需要知道在哪里可以找到 EF 丢失的信息。
-
阅读 EF 源代码,它似乎来自“概念上为空”的东西。有人知道这是什么意思吗?
标签: c# .net entity-framework