我有一个发票列表,其中生成的文件存储在数据库中.

我希望避免在检索发票列表时加载文件数据本身,而是在用户单击下载按钮时加载它.

有没有办法做到这一点?我看到忽略流畅配置,但它一直忽略它.

示例代码:

类别:

public class InvoiceFile
{
    public Guid Id { get; set; }
    public string FileName { get; set; }
    public byte[] File { get; set; }

    public Guid InvoiceId { get; set; }
    public Invoice Invoice { get; set; }
}

我希望在第一个查询中忽略File属性,但在第二个查询中加载:

var invoices = await _payoutDbContext.Invoices
    .Include(x => x.InvoiceFiles)
    .AsNoTracking()
    .AsSplitQuery()
    .ToListAsync();
var file - await _payoutDbContext.InvoiceFiles
    .Where(x => x.Id == invoiceId)
    .AsNoTracking()
    .FirstOrDefaultAsync();

推荐答案

如果没有Select,你就不能控制要加载什么,不加载什么,默认情况下加载完整的实体.但您可以使用Table splitting来配置您的实体

使用Select是容易和更好的,但我建议使用特殊的DTO类来实现这一点:

var invoices = await _payoutDbContext.Invoices
    .Select(x => new InvoiceDto
    {
        Id = x.Id
        // ... other properties

        InvoiceFiles = x.InvoiceFiles.Select(f => new InvoiceFileDto
        {
            Id = f.Id,
            FileName = f.FileName
        }).ToList()
    })
    .AsSplitQuery()
    .ToListAsync();

Csharp相关问答推荐

如何使用C#中的图形API更新用户配置文件图像

. NET WireMock拒绝PostAsJsonAsync序列化

try 还原包时出错:Dapper已经为System.Data.SQLClient定义了依赖项''''

`Task`只有在C#中等待时才会运行吗?

可为空的泛型属性

Blazor服务器端的身份验证角色

实体框架核心中的ComplexType和OwnsOne有什么不同?

在实体框架中处理通用实体&S变更跟踪器

正确处理嵌套的本机集合

为什么我可以用硬编码的集合而不是变量来设置没有setter的IList属性的值?

Blazor Server.NET 8中的Blazore.FluentValidation问题

如何从原始图像到新创建的图像获得相同的特定 colored颜色 ,并且具有相同的 colored颜色 量和相同的宽度和高度?

如何在C#.NET桌面应用程序中动态更改焦点工具上的后退 colored颜色

使用C#12中的主构造函数进行空判断

如何在Cake脚本中设置MSBuild.exe的绝对路径

如何使用LINQ在C#中填充列表列表?

使用LibraryImport在多个dll中导入相同的函数

无法对包含字符串的列进行排序.请与实体框架联接

能否将我图表中的星号与X轴上一天中的第二位数字对齐?

如何提高C#中比较大 struct 的性能?