2017-04-27 33 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. 导入项目

在这之后,它的工作没有问题。