根据数据库表创建 XML 时出错:.Net Core 3.1 内存泄漏



我正在设置一个获取 Xml 数据的方法,其数据来自数据库表。上述功能一直工作到.Net Core2.1项目更新到.Net Core 3.1.1。 下面的代码显示了错误。

模板.cs

orderTemplate =
(from ordt in _context.OrderTemplates
where ordt.Id == orderTempId // int orderTempId=1;
select new XElement("OrderTemplate",
new XElement("OrderTemplateId", ordt.Id),
new XElement("OrderTemplateName", ordt.Name),
new XElement("OrderTemplateDescription", ordt.Description)));

例外

Client projection contains reference to constant expression of 'System.Xml.Linq.XName'. 
This could potentially cause memory leak. Consider assigning this constant to local variable 
and using the variable in the query instead. See https://go.microsoft.com/fwlink/?linkid=2103067 for more information.

XML 数据格式:(预期输出(

<OrderTemplate>
<OrderTemplateId>1</OrderTemplateId>
<OrderTemplateName>BBCSeat</OrderTemplateName>
<OrderTemplateDescription>Boeing Business Class Seat</OrderTemplateDescription>
</OrderTemplate>

模板.cs(已编辑(

orderTemplate =
(from ordt in _context.OrderTemplates
where ordt.Id == orderTemplateId
select new {
_OrderTemplate = ordt,
_OperationTemplates =(from ot in _context.OrderTemplates                                                
join opt in _context.OperationTemplates 
on ot.Id equals opt.OrderTemplateId into ps1                                               
from opt in ps1.DefaultIfEmpty()
join asm in _context.AssemblyUnits
on opt.AssemblyUnitId equals asm.Id into ps5
from asm in ps5.DefaultIfEmpty()
where ot.Id == ordt.Id
orderby opt.OrderBy ascending
select new
{
_OperationTemplate =  opt,
_Assembly =  asm,
})}).AsEnumerable();

已经知道这是重复的问题,但是我在这里做了什么错误的编码。请指导我。

只需选择实体,然后再将它们投影到 XML 中。 无论如何,EF Core 2.1 就是这样做的。

var orderTemplates =_context.OrderTemplates.Where(ordt=> ordt.Id == orderTempId).AsEnumerable();
var orderTemplate =
(from ordt in orderTemplates 
select new XElement("OrderTemplate",
new XElement("OrderTemplateId", ordt.Id),
new XElement("OrderTemplateName", ordt.Name),
new XElement("OrderTemplateDescription", ordt.Description))).ToList();

从概念上讲,第一行代码生成查询,将其转换为 SQL,运行 SQL 查询并返回可以使用结果的 IEnumerable。

第二行将查询结果枚举为orderTemplate对象,并将它们投影到 XElements 中,并将它们复制到列表中。

最新更新