Entity Framework映射异常:字段映射不匹配问题求助
解决Entity Framework原生SQL查询的字段映射问题
问题根源
你使用的Database.SqlQuery<T>是EF的原生SQL执行方法,它不会识别[Column]这类实体映射注解,而是直接按照类的属性名和查询结果的列名进行严格匹配。你的数据库返回的列名是CustomerEmpID,但类里需要映射的属性是CustomerEmpID_Encrypted,所以EF找不到对应列才报错。
解决方案
方案1:修改SQL查询,给列添加别名
直接在SQL里把CustomerEmpID列重命名为CustomerEmpID_Encrypted,匹配类的属性名:
var managerView = Database.SqlQuery<CXL_ManagerView>( "SELECT TOP 1 *, CustomerEmpID AS CustomerEmpID_Encrypted FROM [Legacy].CXL_ManagerView" ).ToList().FirstOrDefault();
如果不想用*,可以明确列出所有字段并指定别名:
var managerView = Database.SqlQuery<CXL_ManagerView>( @"SELECT TOP 1 -- 替换为你的其他实际字段 ID, Name, CustomerEmpID AS CustomerEmpID_Encrypted FROM [Legacy].CXL_ManagerView" ).ToList().FirstOrDefault();
方案2:使用EF的LINQ查询(推荐)
如果你的CXL_ManagerView已经在DbContext中注册为DbSet,直接用LINQ查询,此时[Column]和[NotMapped]注解会生效:
var managerView = dbContext.CXL_ManagerViews.Take(1).FirstOrDefault();
这种方式下,EF会自动根据[Column("CustomerEmpID")]注解,把数据库的CustomerEmpID列映射到类的CustomerEmpID_Encrypted属性,同时忽略带有[NotMapped]的CustomerEmpID属性。
内容的提问来源于stack exchange,提问作者Jiaye.Jing
相关产品推荐
相关产品推荐

