我试图将我的个人项目从 .Net 6 升级到 7(主要是为了找出重大更改)。因此,我预计有些东西需要返工(情况总是如此!)。如果在某个时候我敢于完成这个项目,那么它就是一个非营利项目,但目前的情况还远未实现。
作为现在的上下文:我正在管理一个包含类别的表单(其中类别有问题)。类别和问题都有一个 Order 属性,因此如果用户一开始没有在正确的位置创建它们(或者如果他们忘记了),则可以对它们重新排序。
因此,从数据库检索表单后,我手动排序类别,然后手动排序问题,以便它们可以按正确的顺序显示。
我知道我不应该将实体模型用于任何类型的业务逻辑。我这样做是因为这样进行起来要快得多,因为这是我在空闲时间做的事情(做所有不同的业务模型、实体模型等需要更多的时间)。
在这个阶段,我主要寻找一个“简单”的解决方案,即使不完美。如果这是一个比恢复到 .NET6 花费更多时间的解决方案,那么这是一个好的开始:)
这是我现在针对该问题的代码:
public async Task<GetApprovalFormResponse<GetStaticErrorType>> GetAsync(GetApprovalFormRequest request)
{
var form = await storage.ApprovalForms
.Include(s => s.ApprovalSections).ThenInclude(s => s.ApprovalQuestions)
.Where(s => s.IdApprovalForm == request.IdApprovalForm)
.FirstOrDefaultAsync();
if (form == null)
{
return new GetApprovalFormResponse<GetStaticErrorType> { Success = false, ApprovalForm = null };
}
//We must order the categories and then questions in them
foreach (var category in form.ApprovalSections)
{
form.ApprovalSections = form.ApprovalSections.OrderBy(s => s.Order).ToList();
foreach (var question in category.ApprovalQuestions)
{
category.ApprovalQuestions = category.ApprovalQuestions.OrderBy(s => s.Order).ToList();
}
}
return new GetApprovalFormResponse<GetStaticErrorType> { Success = true, ApprovalForm = form };
}
从它的外观来看(我首先通过查看此线程得到了确认EF Core 6 到 7 集合不再有 setter https://stackoverflow.com/questions/74599304/ef-core-6-to-7-the-collections-no-longer-have-setters/74599455#74599455),我的问题是使用脚手架生成模型后缺少设置器。所以,我必须找到一种方法来解决这个新的现实。
我确实知道我可以更新模板,但如果可能的话,我会将其保留为最后的手段:)
另外,我知道我可以拆分数据库查询以直接按正确的顺序检索它们,而不是在代码中执行此操作。完全不确定如何在一个查询思想中做到这一点。这肯定可以解决我的问题。
起初,我想在其他帖子上发表评论,但似乎我对此没有足够的声誉。我通常会阅读答案,但我几乎从不自己发布内容。我想我知道我将来要做什么。