有时候我们要为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. 1044 Shopping in Mars
  2. 网络推广——网络推广专员面对网站收录异常要学会多角度分析
  3. JAVA WEB知识总结之一--responserequest
  4. (六)boost库之内存管理shared_ptr
  5. 简单获取任意app的URL Schemes
  6. 流式计算的代表:Storm、Flink、Spark Streaming
  7. linux课堂笔记(4)
  8. OpenCV辅助对象(help objects)(6)_InputArray和OutputArray
  9. 面试官:你对Redis缓存了解吗?面对这11道面试题是否有很多问号?
  10. 记:使用IScroll.js 开发picker日历组件遇到的问题及经验总结
  11. linux初始化进程
  12. 语音识别PPT.ppt
  13. Spring Boot + Vue + Shiro 实现前后端分离,写得太好了!
  14. SPC统计及控制图系列标准
  15. 国密测试工具 GMProxy
  16. ttl转rs232发送十六进制_电脑USB转TTL串口RS232串口模块
  17. 用tushare数据自定义期货大宗商品指数(3)
  18. shell中expr算数运算符使用
  19. python中mod是什么意思_【python中,mod_python到底做了些什么呢?】mod python 教程
  20. 科罗拉多州立大学计算机科学,2020年科罗拉多州立大学排名TFE Times美国最佳计算机科学硕士专业排名第81...

热门文章

  1. LeetCode:Combinations
  2. 标准日本语 05_003
  3. Python培训 之五 条件判断
  4. Does taro support react hook?
  5. 聚类的概念和一般步骤
  6. js判断字符串中某个字母出现次数最多
  7. 最全金蝶KIS记账王使用问题汇总
  8. ubuntu 16.04 LTS 开发环境的安装及常用软件
  9. C语言printf 和 scanf 用法
  10. python---基础知识