You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:52:40