2016-08-02 27 views
0

我在它的一類myEntity所用的集合:ASP.NET Core僅返回集合的第一值在實體

public class MyEntity 
{  
    [Key] 
    public int MyId { get; set; } 
    [Display(Name = "Process Name")] 
    public string ProcessName { get; set; } 
    public ICollection<Step> ProcessSteps { get; set; } 
} 

帶班步驟A一對多關係:

public class Step 
{ 
    ... 
    [ForeignKey("MyEntityForeignKey")] 
    public MyEntity { get; set; } 
} 

下面是API調用返回指定myEntity所:

public async Task<IActionResult> MyEntity(int? id) 
{ 
    if (id == null) 
    { 
     return Ok(await _context.MyEntity.ToListAsync()); 
    } 

    var process = _context.MyEntity.Where(f => f.MyId == id).Include(g => g.ProcessSteps); 

    if (process.Count() == 0) 
    { 
     return NotFound(); 
    } 

    return Ok(process.First()); 
} 

運行此,一切看起來除了在t大他收集。在調試時,顯示正確的值。即使我在這些集合中有2+項,它總是隻返回來自MyClass的ProcessSteps集合中的第一個項目,當它返回響應 Ok

編輯:

它看起來好像回到我的連接外鍵的反應是罪魁禍首。迭代並清零外鍵似乎已經修復了一些問題。

foreach (Step step in MyEntity.ProcessSteps) 
{ 
    Step.MyEntity = null; 
} 

return Ok(MyEntity.ProcessSteps) 
+0

如果你在'var process'後面放置一個斷點並檢查內存中的對象,在ProcessSteps下顯示多個項目? –

+2

不一定相關,但應該使用'FirstOrDefault()'並檢查'null',而不是先運行Count(),然後再運行First()。後者將運行兩個查詢。 – poke

+2

@NateBarbettini'process'只是一個尚未執行的查詢語句,因此沒有任何內容從數據庫加載。 – poke

回答

0

我有一個類似的問題,其中只有目標集合的第一個實體被返回,除非我設置爲null來刪除所有內部引用。
但是我能夠通過在返回它之前將我的模型映射到dto對象(或ViewModel)來解決此問題。 dto通常具有模型實體的子集。這樣我就不必將null設置爲null。

總的來說,我認爲這是一個很好的做法,返回給客戶端只有那些嚴格需要屬性,而不給整個模型對象。