2017-09-08 38 views
2

我有喜歡的EntityFramework核2.0跳過裝載列

public class UploadedFile 
{ 
    public int Id { get; set; } 
    public string Source { get; set; } 
    public byte[] Content { get; set; } 

我希望能夠從數據庫中加載的「UPLOADEDFILES」列表中,而無需使用EF核心,其結構保存到MSSQL數據庫的一些文件實際上是從數據庫中讀取「內容」列。所以我真的不能使用

await _context.UploadedFiles.ToListAsync();

我相信我可以使用類似波紋管與存儲過程。

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

但是,有沒有使用存儲過程,不會涉及任何其他方式?我無法取消映射模型中的列,因爲我需要它插入/讀取單個項目。 謝謝。

+0

閱讀投影是否違反了您的任何要求?例如_context.UploadedFiles.Select(uf => new {uf.Id,uf.Source})? – Eric

+0

@Eric我認爲你是對的,我可以用投影來做。我將嘗試實際分析查詢,請將其發佈爲答案 – mslliviu

回答

2

使用的投影:

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

我結束了_context.UploadedFiles.Select(up => new UploadedFile(){Id = up.Id,Source = up.Source})。ToListAsync() ;因爲我想產生一個UploadedFile對象。 – mslliviu

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 { ... })

我強烈建議使用強類型。

+2

謝謝克里斯蒂安,我也強烈鍵入數據(這裏需要),但埃裏克的答案是第一 – mslliviu