我得到了英雄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
有關於例外的更多信息嗎?你能抓住它並檢查它的其他屬性嗎? –