EntityFramework Core 2.0跳过加载列

时间:2017-09-08 18:07:47

标签: c# entity-framework .net-core entity-framework-core

我正在使用具有类似

结构的EF核心将一些文件保存到MSSQL数据库中
public class UploadedFile
{
    public int Id { get; set; }
    public string Source { get; set; }
    public byte[] Content { get; set; }

我希望能够从数据库加载“UploadedFiles”列表,而无需实际从数据库中读取Content列。所以我不能真正使用

await _context.UploadedFiles.ToListAsync();

我相信我可以使用类似于存储过程的bellow。

_context.Set<UploadedFiles>().FromSql("dbo.spGetUploadedFiles")

但是,有没有其他方法不涉及使用存储过程?我无法取消映射模型中的列,因为我需要它来插入/读取单个项目。 谢谢。

2 个答案:

答案 0 :(得分:2)

使用投影:

var results = _context.UploadedFiles.Select(uf => new { uf.Id, uf.Source });

答案 1 :(得分:2)

您基本上可以使用.Select({..)指定要返回的列:

public class MyItem
{
    public int Id { get; set; }
    public string Source { get; set; }
}

var data = _context.UploadedFiles
    .Select(p => new MyItem
    {
        Id = p.Id,
        Source = p.Source
    })
    .ToListAsync();

通过这种方式,您可以告诉EF仅为这些列生成选择,仅此而已。如果您愿意,也可以选择.Select(p => new { ... })之类的匿名对象。

我强烈建议使用强类型。