解决EF使用context.Database.SqlQuery时NotMapped属性列为空null的问题(转载)
有时候我们要为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的问题(转载)相关推荐
- SpringMvc中返回json时对象属性为空也要返回key
场景: 最近在写接口时候,正常使用@RestController返回json串,发现当返回的对象里的属性值为空字符串或者null时候,json返回里就会自动去除这个key,啥意思呢?举个"栗 ...
- entity.Database.SqlQuery() 和entity.Database.SqlCommand()
原文地址: http://msdn.microsoft.com/en-us/library/gg715124(v=vs.103) 使用 EF 4.1 或者更新版本, 你可以直接执行任何数据库命令. 在 ...
- MyEclipse 装载database driver 时提示driver class not found
由于课程需要,就提前预习了一下SSH框架,在搭建过程中产生了一些问题,在这里记录一下解决方法 MyEclipse 装载database driver 时提示driver class not found ...
- EFCore废弃了TransactionScope取而代之的Context.Database.BeginTransaction
TransactionScope是.net平台基于的分布式事务组件,它默认为本地事务,同时当系统有需要时可以自动提升为分布式事务,而对系统的前提是要开启MSDTC服务,必要时需要在数据库服务器与应用服 ...
- Material Recognition in the Wild with the Materials in Context Database论文笔记
摘要: 在现实世界中,材料识别是一个有挑战性的任务.真实世界中的材料是有很丰富的表面纹理.几何形状.光照条件和杂波.这些因素使的这个问题难以处理.在这边论文,我们提出了一个新的.大规模的.在户外的材料 ...
- 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题
一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于"复杂的操作在生成SQL阶段耗时长,且执行效率不高",但并不是没有办法解决,从EF本身举几个简单的优化例子: ①: ...
- 已解决org.springframework.context.annotation.ConflictingBeanDefinitionException异常的正确解决方法,亲测有效!!!
已解决org.springframework.context.annotation.ConflictingBeanDefinitionException异常的正确解决方法,亲测有效!!! 文章目录 报 ...
- 在layui中使用ajax传值给后台,解决layui批量传值到后台操作时出现传值为空的问题...
如图,前台的样子,data的参数为 [ {"good_id":1,"good_name":"标样-总磷","good_num&qu ...
- 解决javah生成c头文件时找不到android类库的问题
解决javah生成c头文件时找不到android类库的问题 参考文章: (1)解决javah生成c头文件时找不到android类库的问题 (2)https://www.cnblogs.com/liul ...
最新文章
- AutoFac使用方法总结:Part I
- 接口测试要如何做数据准备
- 机器学习,就用Python!五大专家详解其优势何在
- python之枚举类Enum
- 局部图像特征描述概述
- js删除数组中的某一个元素
- python 小程序搜索排名优化_python3 搜索关键字小程序
- 深度学习中常说的向量和表示
- 点击率预估与冷启动(一)
- IOS 预览pdf,word文档的集中方式
- 3D打印文件格式:STL、OBJ、AMF、3MF
- C语言银行排队系统仿真
- 前端面试 浏览器原理
- Java微信公众平台开发之群发接口(高级群发)
- 好嗨游戏:LPL春季赛决赛在即,黑8传奇JDG迎战S8冠军IG
- PIC16F877A与Proteus仿真-PIC16F877A最小系统及开发环境搭建
- kodi netflix_如何让Kodi自动播放下一集(就像Netflix一样)
- latte - 拿铁咖啡
- 【BZOJ3267】KC采花
- 阿里最全面试116题:阿里天猫、蚂蚁金服、阿里巴巴面试题含答案
热门文章
- 虚机不能启动的特例思考
- 遇到的几个开机启动故障
- 《SolidWorks 2017中文版机械设计从入门到精通)》——1.6 参考基准轴
- 《从零开始学Swift》学习笔记(Day 16)——字典集合
- [数据库]SQL Server 用户NT AUTHORITY\IUSR 登录失败
- 自定义jQuery插件
- Mark To Market - MTM
- [原]问题解决办法:there are offline or missing virtual drivers with preserved cache
- 事件处理程序的执行上下文
- Spring MVC 基础及相关概念(基础一)