2017-11-18 212 views
1

我想要獲取包含具有特定ID的網站的所有類別的列表。下面是腳手架生成的方法,我稍作修改。比較Guid時的例外

 [HttpGet("Categories/{id}")] 
     public async Task<IActionResult> GetCategoriesSite([FromRoute] Guid id) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      // This line throws the error 
      var categories = await _context.Categories.Where(o => o.Site.Id.Equals(id)).ToListAsync(); 

      if (categories == null) 
      { 
       return NotFound(); 
      } 

      return Ok(categories); 
     } 

不幸的是,當我運行這個它引發以下錯誤:

System.ArgumentException: Expression of type 'System.Nullable`1[System.Guid]' cannot be used for parameter of type 'System.Guid' of method 'Boolean Equals(System.Guid)' 

實體是非常簡單的:

public class Category 
    { 
     public Guid Id { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 

     public Site Site { get; set; } 
    } 

    public class Site 
    { 
     public Guid Id { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 

     public ICollection<Category> Categories { get; set; } 
    } 

什麼可能我是做錯了什麼?

+0

你能告訴你使用到的GUID傳遞到GetCategoriesSite方法的代碼。這個錯誤聽起來像你沒有通過一個Guid,而且它是一個空值。 – Darthchai

+0

它是一個來自郵遞員的GET調用http:// localhost:8080/api/Categories/32f770d6-ce84-4325-42ea-08d529984e6d – Aeseir

+0

哪一行導致異常發生? – Darthchai

回答

3

好像EF Core中的一個bug,在github上檢查這個issue。解決方法與==運營商的Equals()更換爲我工作得很好:

var categories = await _context.Categories.Where(o => o.Site.Id == id).ToListAsync(); 
+0

甜的jehovas證人就是這樣。我血腥地拉我的頭髮,認爲這是我做的一些愚蠢的事情。 – Aeseir