c# - 添加具有多个子实体的实体的最佳实践(实体框架)
问题描述
我目前有一个对象Report
。此报表对象有多个子实体,例如WorkOrder
和ReleaseQuestions
。我只是想询问将WorkOrder
's 和ReleaseQuestions
's 添加到数据库的最佳实践。目前,当创建报表时,我将新的空白对象添加到我的报表对象中,然后将其添加到数据库中。这是因为最终这些组件将由用户填写,因此将空白行放在数据库中不会造成太大伤害,但我不确定这是最佳实践。如果我单独添加新组件会更好吗?还是我正在做的事情离我不远?
代码,对于更直观的人:
public async Task<ReportModel> AddReport(ReportModel reportModel)
{
// CapacityPlanReport report = _mapper.Map<ReportModel, CapacityPlanReport>(reportModel);
var report = new CapacityPlanReport
{
AddedYear = DateTime.Now.ToString(),
Type = reportModel.Type,
Eta = reportModel.Eta
};
// Create the corresponding pieces of the report in the database.
report.ReleaseQuestion = new CapacityPlanReleaseQuestion();
report.WorkOrder = new CapacityPlanWorkOrder();
_context.CapacityPlanReport.Add(report);
await _context.SaveChangesAsync();
var result = await GetReport(report.CapacityPlanReportId);
return result;
}
解决方案
如果组件稍后将由用户填写,则在插入Report
only时根本不填写它们并使用null
s。当用户为您提供适当的数据时,创建实体,将其分配给报告SaveChanges
- EF 将更新您现有的Report
并将子实体与所有必要的 FK 引用一起插入到数据库中。
对于尚不存在的东西null
而不是空实例来说,这可能更自然。毕竟,空实例是某种东西。
推荐阅读
- c++ - 如何在 Xcode 9.3 中显示 C++ 代码文档?
- java - 如何使长时间等待的线程运行
- r - R visNetwork:创建新类型的边
- node.js - comapare数组中的id并通过查找mongoDB获取值
- php - 接收错误的 POST 变量
- javascript - 如何在时间间隔后重复调用函数
- typescript - 如何构建material2可折叠菜单
- c# - 使用 XPath 在表中查找元素
- sonarqube - 通过 Web-API 的 Sonarqube 更新规则
- c# - MVC C# PagedList - PagedListPager 将 int 数组作为参数传递