我得到了英雄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
有绝对日志中没有其他错误或消息,使我调试此。
我能做什么错?
编辑:更多信息
- 使用实体框架6
- 使用Visual Studio 2017年(内置SQL服务器)
- “抛出异常:在EntityFramework.SqlServer.dll的 'System.NotSupportedException' “是唯一没有显示的东西
- 代码与我的项目完全一样,只省略了填充经过测试的英雄ID的逻辑
调试器输出
'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
类和完整的方法添加
有很多事情可能导致这种情况。我想起前两个不正确的映射和意想不到的扩展方法。你的C#'Hero'类是什么样的?你的上下文类是什么样的? – hvd
@Kris这个异常意味着生成的SQL查询失败,所以不行,OP将无法打印生成的查询。 – hvd
有关于例外的更多信息吗?你能抓住它并检查它的其他属性吗? –