Entity Framework Core新增列后LINQ查询无法翻译如何解决?
解决方案
- 检查新增属性的可访问性
你的CurrentRunningServiceDbModel类默认无修饰符为internal,新增的IsActive属性如果没有显式加public修饰符,当模型类和ServicesContext不在同一个程序集时,EF无法读取属性信息,会将其判定为未映射字段,导致查询无法转换。你可以给属性加public修饰符,或者在模型类所在程序集的AssemblyInfo.cs中添加如下配置:[assembly: InternalsVisibleTo("你的DbContext所在程序集名称")] - 排查属性映射配置
检查是否误给IsActive属性加了[NotMapped]特性,或是Fluent API中存在忽略该字段的配置,比如:
如有相关配置直接删除即可。modelBuilder.Entity<CurrentRunningServiceDbModel>().Ignore(x => x.IsActive) - 校验字段匹配性
确认数据库新增列的名称、类型和模型属性完全匹配:比如SQL Server中布尔类型对应bit类型,列名是否为IsActive;如果数据库列允许为NULL,属性需要声明为可空布尔类型public bool? IsActive { get; set; },否则会出现映射不匹配的问题。 - 简易测试验证
你可以先执行无过滤条件的查询,验证属性是否正常映射:
查看返回对象的var testData = dbContext.CurrentRunningServices.FirstOrDefault();IsActive是否能正常取到数据库值,如果取值为默认值说明映射未生效,回到上述步骤逐一排查即可。
内容的提问来源于stack exchange,提问作者CodeMonkey
相关产品推荐
相关产品推荐

