首页 > 解决方案 > 添加具有多个子实体的实体的最佳实践(实体框架)

问题描述

我目前有一个对象Report。此报表对象有多个子实体,例如WorkOrderReleaseQuestions。我只是想询问将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;
}

标签: c#asp.netentity-frameworkentity-framework-core

解决方案


如果组件稍后将由用户填写,则在插入Reportonly时根本不填写它们并使用nulls。当用户为您提供适当的数据时,创建实体,将其分配给报告SaveChanges- EF 将更新您现有的Report并将子实体与所有必要的 FK 引用一起插入到数据库中。

对于尚不存在的东西null而不是空实例来说,这可能更自然。毕竟,空实例是某种东西。


推荐阅读