修改从 Entity Framework Core 返回的本地实体后,为啥我的执行消失了?
Posted
技术标签:
【中文标题】修改从 Entity Framework Core 返回的本地实体后,为啥我的执行消失了?【英文标题】:Why does my execution dissapear after modifying a local entity returned from Entity Framework Core?修改从 Entity Framework Core 返回的本地实体后,为什么我的执行消失了? 【发布时间】:2017-09-01 19:52:08 【问题描述】:我在 ASP.Net Core MVC 中有一个 Web API 控制器。
看起来像这样:
namespace Hrsa.Core.Web.App.Controllers.Api
[Route("api/[controller]")]
public class CasesController : Controller
private readonly IGenericService<Case> _caseGenericService;
public CasesController(IGenericService<Case> caseGenericService)
_caseGenericService = caseGenericService;
[HttpPost]
public async Task<Case> AddCase([FromBody] EmployeeCaseFromBodyModel model)
Case employeeCase = new Case()
InitalConsultDate = model.InitialConsultDate,
;
Case newCase = await _caseGenericService.InsertAsync(employeeCase);
EmployeeCase empToCase = new EmployeeCase
CaseId = newCase.Id,
EmployeeId = model.EmployeeId
;
newCase.EmployeeCases.Add(empToCase);
await _caseGenericService.UpdateAsync(newCase);
return newCase;
我从通用服务中取回了我的新案例。 我的新案例有一个新生成的 id。太好了。
现在我创建一个新的 EmployeeCase 记录,其中包含我新生成的案例的 ID 和我想要添加案例的员工 ID。
现在我尝试简单地将 Employee 案例记录添加到 EmployeeCases 集合中。
但执行只是被吞没并消失了。 我在输出窗口中得到一堆线程退出行。
The thread 0x2128 has exited with code 0 (0x0).
The thread 0x2e38 has exited with code 0 (0x0).
The thread 0x2d5c has exited with code 0 (0x0).
The thread 0x2d44 has exited with code 0 (0x0).
The thread 0x2658 has exited with code 0 (0x0).
一旦实体框架插入并返回了新案例,newCase 变量不是局部变量吗? 我不应该像这样修改它吗?
执行在哪里? 在调试时,当我进入下一行时,它只会让我永远退出线程并且永远不会进入下一行。
实体是否仍能以某种方式附加到 dbContext 而不会被释放? 这就是它不允许我在本地使用它的原因吗?
我想我可以像这样在本地修改它,然后在将 EmployeeCase 记录添加到它之后发送整个实体以进行更新。 但它在到达更新行之前就被吞没了。
更新 1:
现在我在输出窗口中看到所有“线程 nnn 已以代码 0 退出”行之前:
Exception thrown: 'System.NullReferenceException' in Hrsa.Core.Web.App.dll
所以这一行中有些东西是空的:
newCase.EmployeeCases.Add(empToCase);
但我不知道是什么。
【问题讨论】:
【参考方案1】:问题是当我尝试添加到列表时,newCase 的 EmployeeCases 列表仍然为空。
我添加了这一行:
newCase.EmployeeCases = new List<EmployeeCase>();
完成 HttpPost:
[HttpPost]
public async Task<Case> AddCase([FromBody] EmployeeCaseFromBodyModel model)
Case employeeCase = new Case()
// LerSpecialistId = model.LerSpecialistId,
// InitialContactId = model.InitialContactId,
InitalConsultDate = model.InitialConsultDate,
// Notes = model.Notes
;
Case newCase = await _caseGenericService.InsertAsync(employeeCase);
newCase.EmployeeCases = new List<EmployeeCase>();
newCase.EmployeeCases.Add(new EmployeeCase
CaseId = newCase.Id,
EmployeeId = model.EmployeeId
);
await _caseGenericService.UpdateAsync(newCase);
return newCase;
【讨论】:
以上是关于修改从 Entity Framework Core 返回的本地实体后,为啥我的执行消失了?的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework Core 7中高效地进行批量数据插入
从 Entity Framework Core 的导航属性中选择对象列表
Entity Framework Core 中的动态数据模型