2017-04-27 35 views
0

我得到了英雄ID的列表,並試圖做一個LINQ WHERE IN語句來檢索數據庫中的所有對象,當它們的ID與列表中的一個匹配時。LINQ查詢導致System.NotSupported

[HttpGet] 
[Route("HeroList")] 
public IHttpActionResult GetHeroList(HeroIdListModel model) { 
if(!ModelState.IsValid) return BadRequest("Model invalid"); 
    List<Guid> heroIds = model.Ids; 

    // check each Id is there 
    heroIds.ForEach(o => { Console.WriteLine(o.ToString());}); 


    try 
    { 
    // WHERE IN Linq statement 
    var heroes = db.Heroes 
        .Where(o => heroIds.Contains(o.Id)) 
        .ToList(); 
    } 
    catch (Exception e) 
    { 
      Console.WriteLine(e); 
      Console.WriteLine(e.StackTrace); 
      throw; 
    } 
    return Ok(heroes); 
} 

public class HeroIdListModel 
{ 
    public string HeroTypes { get; set; } 
    public List<Guid> Ids { get; set; } 
} 

public class Hero 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public int Power { get; set; } 
} 

每當我運行這個它拋出以下異常:

Exception thrown: 'System.NotSupportedException' in EntityFramework.SqlServer.dll 

有絕對日誌中沒有其他錯誤或消息,使我調試此。

我能做什麼錯?

編輯:更多信息

  1. 使用實體框架6
  2. 使用Visual Studio 2017年(內置SQL服務器)
  3. 「拋出異常:在EntityFramework.SqlServer.dll的 'System.NotSupportedException' 「是唯一沒有顯示的東西
  4. 代碼與我的項目完全一樣,只省略了填充經過測試的英雄ID的邏輯
  5. 調試器輸出

    'iisexpress.exe'(CLR v4.0.30319:/ LM/W3SVC/3/ROOT-1-131377605294445115):加載 'EntityFrameworkDynamicProxies-HeroServer'。 'iisexpress.exe'(CLR v4.0.30319:/ LM/W3SVC/3/ROOT-1-131377605294445115):Loaded'EntityFrameworkDynamicProxies-Microsoft.AspNet.Identity.EntityFramework'。 拋出異常:的 'System.NotSupportedException' 在EntityFramework.SqlServer.dll

  6. 類和完整的方法添加

+0

有很多事情可能導致這種情況。我想起前兩個不正確的映射和意想不到的擴展方法。你的C#'Hero'類是什麼樣的?你的上下文類是什麼樣的? – hvd

+0

@Kris這個異常意味着生成的SQL查詢失敗,所以不行,OP將無法打印生成的查詢。 – hvd

+1

有關於例外的更多信息嗎?你能抓住它並檢查它的其他屬性嗎? –

回答

0

問題似乎是由於VS2017。

經過所有可能的組合和調試步驟後,只能重新安裝。

  1. 卸載VS2017
  2. 潔淨工程文件夾(你有任何任何高速緩存或與文件夾)
  3. 安裝VS2017
  4. 導入項目

在這之後,它的工作沒有問題。