我正在使用EF Core 3.1,并且有一个包含实体Contract和ContractType的模型。合同具有必填(不可为空)的ContractTypeId字段和ContractType导航属性。如果我从数据库中选择一个Contract对象,请确保将其ContractType加载到内存中(我使用延迟加载),然后将ContractType属性设置为null,该Contract对象在ChangeTracker中被标记为已删除(并且实际上已从DB(如果我调用SaveChanges)。
我了解这与Cascade删除行为的文档一致:
https://docs.microsoft.com/zh-cn/ef/core/saving/cascade-delete
我无法理解其背后的逻辑。如果您只是弄乱了必要的关系(由于我的代码中的错误导致导航属性被设置为null),EF决定删除您的主要实体(在本例中为Contract),这似乎很危险。我想念什么吗?也许这里真正的问题是为什么级联删除默认行为?
根据EF团队的说法,这是设计使然,但可以通过将其设置DeleteOrphansTiming
为来更改Never
:
https://github.com/dotnet/efcore/issues/21840
删除行为也可以设置为除级联删除以外的其他方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句