C# 为什么EF4在删除和提交记录删除之前会清空关系?
当我的应用程序请求我删除一个实体时,我想删除与该实体关联的上传文件。因此,我有以下代码:C# 为什么EF4在删除和提交记录删除之前会清空关系?,c#,entity-framework,entity-framework-4.1,C#,Entity Framework,Entity Framework 4.1,当我的应用程序请求我删除一个实体时,我想删除与该实体关联的上传文件。因此,我有以下代码: TestRequest req = _context.TestRequests .Where(x => x.id == id) .Include(x => x.TestRequestRuns)
TestRequest req = _context.TestRequests
.Where(x => x.id == id)
.Include(x => x.TestRequestRuns)
.Include(x => x.TestPlanFile)
.Single();
_context.TestRequests.Remove(req);
_context.UploadedFiles.Remove(req.TestPlanFile);
_context.SaveChanges();
此代码包含删除上载文件的例外情况。调试表明,调用\u context.TestRequests.Remove(req)
会使req.TestPlanFile
属性null
,从而导致异常(无法删除null上传的文件)。这不会清除req.TestPlanFileId
属性
要执行此删除操作,必须先标记要删除的子实体,然后再标记要删除的主实体。这也意味着标记要删除的项必须是您对该实体数据所做的最后一件事,因为您将(至少很容易)无法访问子实体以进行进一步操作(并非总是删除子实体,例如,如果上载的文件被多个测试计划使用)
在使用
SaveChanges()
之前,是否有人能解释为什么会发生属性剥离?我本以为Remove()
的唯一功能是告诉EF它需要在保存更改时删除行,但显然它做的更多。+1因为我也想看到这背后的一些推理。是的,Remove
做的更多:+1因为我也想看到这背后的一些推理。是的,Remove
做的更多: