有时候我们要为EF中的Model加一个新属性,这个属性不是数据库中的字段,而是从其它表中关联出来的。EF中要标示一个列不是对应表中字段只需要加上NotMapped特性。要使用NotMapped,保证你的项目引用了System.ComponentModel.DataAnnotations.dll,NotMapped特性在命名空间System.ComponentModel.DataAnnotations.Schema下。比如我们有一个Employee实体:

public class Employee
{public int EmployeeId { get; set; }public string EmployeeName { get; set; }[NotMapped]public string CustomerName { get; set; }
}

可能你会想到用context.Database.SqlQuery写一句原生的sql为CustomerName赋值,就像下面的代码:

public List<Employee> GetEmployees()
{using (MyContext context = new MyContext()){return context.Database.SqlQuery<Employee>("select E.EmployeeId, E.EmployeeName, C.CustomerName from Employee E left join Customer C on E.CustomerId = C.CustomerId").ToList();}
}

但是遗憾是上面代码字段CustomerName始终都为空。因为使用context.Database.SqlQuery虽然是传的sql语句,但是它和原生的ADO.NET还是不一样,它还是会走一下EF框架,用NotMapped标示的字段,EF会忽略掉这个字段,当生成sql语句也不会包含这个字段,无论你增,改,查都不会管这个字字段,所以读出来始终为空null值。下面介绍一种利用linq的变通的办法。

public class EmployeeVM
{public int EmployeeId { get; set; }public string EmployeeName { get; set; }public string CustomerName { get; set; }
}

调用EF并使用linq的left join读取属性:

public List<Employee> GetEmployees()
{using (MyContext context = new MyContext()){return context.Database.SqlQuery<EmployeeVM>("select E.EmployeeId, E.EmployeeName,C.CustomerName from Employee E left join Customer C on E.CustomerId = C.CustomerId").Select(x=> new Employee(){EmployeeId = x.EmployeeId,EmployeeName = x.EmployeeName,CustomerName = x.CustomerName}).ToList();}
}

原文链接

解决EF使用context.Database.SqlQuery时NotMapped属性列为空null的问题(转载)相关推荐

  1. SpringMvc中返回json时对象属性为空也要返回key

    场景: 最近在写接口时候,正常使用@RestController返回json串,发现当返回的对象里的属性值为空字符串或者null时候,json返回里就会自动去除这个key,啥意思呢?举个"栗 ...

  2. entity.Database.SqlQuery() 和entity.Database.SqlCommand()

    原文地址: http://msdn.microsoft.com/en-us/library/gg715124(v=vs.103) 使用 EF 4.1 或者更新版本, 你可以直接执行任何数据库命令. 在 ...

  3. MyEclipse 装载database driver 时提示driver class not found

    由于课程需要,就提前预习了一下SSH框架,在搭建过程中产生了一些问题,在这里记录一下解决方法 MyEclipse 装载database driver 时提示driver class not found ...

  4. EFCore废弃了TransactionScope取而代之的Context.Database.BeginTransaction

    TransactionScope是.net平台基于的分布式事务组件,它默认为本地事务,同时当系统有需要时可以自动提升为分布式事务,而对系统的前提是要开启MSDTC服务,必要时需要在数据库服务器与应用服 ...

  5. Material Recognition in the Wild with the Materials in Context Database论文笔记

    摘要: 在现实世界中,材料识别是一个有挑战性的任务.真实世界中的材料是有很丰富的表面纹理.几何形状.光照条件和杂波.这些因素使的这个问题难以处理.在这边论文,我们提出了一个新的.大规模的.在户外的材料 ...

  6. 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题

    一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于"复杂的操作在生成SQL阶段耗时长,且执行效率不高",但并不是没有办法解决,从EF本身举几个简单的优化例子: ①: ...

  7. 已解决org.springframework.context.annotation.ConflictingBeanDefinitionException异常的正确解决方法,亲测有效!!!

    已解决org.springframework.context.annotation.ConflictingBeanDefinitionException异常的正确解决方法,亲测有效!!! 文章目录 报 ...

  8. 在layui中使用ajax传值给后台,解决layui批量传值到后台操作时出现传值为空的问题...

    如图,前台的样子,data的参数为 [ {"good_id":1,"good_name":"标样-总磷","good_num&qu ...

  9. 解决javah生成c头文件时找不到android类库的问题

    解决javah生成c头文件时找不到android类库的问题 参考文章: (1)解决javah生成c头文件时找不到android类库的问题 (2)https://www.cnblogs.com/liul ...

最新文章

  1. AutoFac使用方法总结:Part I
  2. 接口测试要如何做数据准备
  3. 机器学习,就用Python!五大专家详解其优势何在
  4. python之枚举类Enum
  5. 局部图像特征描述概述
  6. js删除数组中的某一个元素
  7. python 小程序搜索排名优化_python3 搜索关键字小程序
  8. 深度学习中常说的向量和表示
  9. 点击率预估与冷启动(一)
  10. IOS 预览pdf,word文档的集中方式
  11. 3D打印文件格式:STL、OBJ、AMF、3MF
  12. C语言银行排队系统仿真
  13. 前端面试 浏览器原理
  14. Java微信公众平台开发之群发接口(高级群发)
  15. 好嗨游戏:LPL春季赛决赛在即,黑8传奇JDG迎战S8冠军IG
  16. PIC16F877A与Proteus仿真-PIC16F877A最小系统及开发环境搭建
  17. kodi netflix_如何让Kodi自动播放下一集(就像Netflix一样)
  18. latte - 拿铁咖啡
  19. 【BZOJ3267】KC采花
  20. 阿里最全面试116题:阿里天猫、蚂蚁金服、阿里巴巴面试题含答案

热门文章

  1. 虚机不能启动的特例思考
  2. 遇到的几个开机启动故障
  3. 《SolidWorks 2017中文版机械设计从入门到精通)》——1.6 参考基准轴
  4. 《从零开始学Swift》学习笔记(Day 16)——字典集合
  5. [数据库]SQL Server 用户NT AUTHORITY\IUSR 登录失败
  6. 自定义jQuery插件
  7. Mark To Market - MTM
  8. [原]问题解决办法:there are offline or missing virtual drivers with preserved cache
  9. 事件处理程序的执行上下文
  10. Spring MVC 基础及相关概念(基础一)