Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么EF4在删除和提交记录删除之前会清空关系?_C#_Entity Framework_Entity Framework 4.1 - Fatal编程技术网

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
做的更多: