EF版本 6.0

在项目中双向一对一关系是普遍存在的,如果不仔细检查,并不容易发现这个坑

下面新建两个类(假设这两个类是一对一的关系)对应实体都设置为可延迟加载

映射关系为:

再建一个数据访问类:

运行下面查询语句:

TestContext db = new TestContext();var list = db.QuerySchool.ToList();

正常情况下,生成的查询语句应该只查询SchoolInfo表,但是生成sql语句却是这样:

SELECT[Extent1].[Sid] AS [Sid],[Extent1].[SchoolName] AS [SchoolName],[Extent2].[Id] AS [Id]FROM  [dbo].[SchoolInfo] AS [Extent1]LEFT OUTER JOIN [dbo].[ClassInfo] AS [Extent2] ON [Extent1].[Sid] = [Extent2].[SchoolId]

进行了一个表联查,明明没有查询ClassInfo表这里却进行了关联(问题1)

下面修改下查询语句

var list = db.QuerySchool.Select(x => new { SId = x.Sid, SchoolName = x.SchoolName }).ToList();

只查询出ID和SchoolName,生成sql语句如下:

SELECT[Extent1].[Sid] AS [Sid],[Extent1].[SchoolName] AS [SchoolName]FROM [dbo].[SchoolInfo] AS [Extent1]

这次却是正常的

现在查询ClassInfo表:

var list = db.QueryClass.ToList();

生成sql语句如下:(问题2)

SELECT[Extent1].[Id] AS [Id],[Extent1].[SchoolName] AS [SchoolName],[Extent1].[ClassName] AS [ClassName],[Extent1].[SchoolId] AS [SchoolId]FROM [dbo].[ClassInfo] AS [Extent1]

可以看到SQL语句并未像SchoolInfo表一样出现表联查语句

疑问:

HasRequired(x => x.School).WithRequiredDependent(x => x.ClassInfo).Map(map => map.MapKey("SchoolId")).WillCascadeOnDelete(true);

ClassInfo必须有SchoolInfo,SchoolInfo又依赖ClassInfo,二者是生死存亡的关系,缺一不可,可是这样无法解释问题1和问题2

当关系为单向一对一关系时查询是正常的,不会出现表联查现象

转载于:https://www.cnblogs.com/yujiajun/p/EFOneToOneRelation.html

EF双向一对一中的坑相关推荐

  1. jeecg boot一对多新增的附表不会主键是一个string_测试开发专题:spring-boot如何使用JPA进行双向一对多配置...

    本片文章我们主要介绍spring-boot如何进行JPA的配置以及如何进行实体间的一对多配置. 依赖准备 要在spring-boot使用jpa需要在项目中有进入相关的依赖,pom文件里加入下面内容 & ...

  2. 单向一对多和双向一对多

    <深入浅出Hibernate>中对单向一对多和双向一对多进行了一些介绍,其中提到:"由于是单向关联,为了保持关联关系,只能通过主控方对被控方进行及联更新."也就是说,对 ...

  3. Hibernate中双向一对多关联关系

    前边我们讲过了单向多对一的关联关系,即在Java代码-hbm.xml配置文件-数据库表格中只是描述了一种类中多个对象可以对应一个其他类对象的关联关系.我们需要在一个类中含有另一个类的引用变量,然后在包 ...

  4. Hibernate关联关系映射-----双向一对多/多对一映射配置

    转自:http://blog.csdn.net/yifei12315/article/details/6985194 /// Hibernate: /// 双向关联就是有"一对多" ...

  5. JPA中实现双向一对多的关联关系

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  6. ef导入oracle数据类型不正确,EF Core操作Oracle踩坑记

    EF(Entity Framework)是微软标志性且成熟的ORM,从之前的.NET Framework时代就已经很常见了,但是给人的感觉还是偏"重",性能被不少人吐槽,倒是像Da ...

  7. hibernate 双向一对多 关联在多端维护

    作者:xyzroundo 如果在"一"一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多  的一端来维护关联关系

  8. 7、JPA-映射-双向一对多

    一个用户对应多个订单,多个订单对应一个用户,不管查哪一边都可以得到另一边的信息 实体类 Customer package com.jpa.yingshe;import javax.persistenc ...

  9. ef mysql 的坑_C# EF 与 MySql 的那些坑

    之前一直想用 mysql 和 ef .然后多次尝试也只能感叹 还是 sqlsever 是亲儿子. 今天在单位又尝试了一次,然后就成功了,记录一下遇到的问题. 首先是安装包和驱动?. 请保证 MySql ...

最新文章

  1. 算法(2)KMP算法
  2. windows7下GithubDesktop和极域学生客户端冲突导致无法正常打开解决方案
  3. Apache Log4j2 远程代码执行 漏洞
  4. n9009 Android5.0内核,三星N9009(Galaxy Note 3 电信版 Android 5.0)刷Recovery教程
  5. ubuntu12.04 安装中文输入法
  6. 湖南第一师范计算机科学与技,湖南第一师范学院2019年各省各专业录取分数线...
  7. 今日心得:人生就像一杯茶,不会苦一辈子但会苦一阵子
  8. php表单的提交方法有什么,php – 确定哪个表单已提交的最佳方法是什么?
  9. 十字连接焊盘_PCB板上的那些“特殊焊盘 “到底起什么作用?
  10. python配置文件封装_Python configparser模块封装及构造配置文件代码示例
  11. 经典鸡兔同笼同类型问题
  12. activity劫持学习与复现
  13. 突然有感而发,发一个自己杜撰的小寓言
  14. 学习STM32的理由
  15. 恐龙为何不发明计算机,为什么恐龙没有产生智慧文明,而人类文明反而如此发达?...
  16. 关于电销团队负责人如何挑选外呼系统?
  17. STM32F103C8T6引脚图及引脚功能说明
  18. 获取随机数字且不重复
  19. win10如何修改hosts文件?
  20. 华中科技大学成立人工智能学院,两名长江学者坐镇

热门文章

  1. Linux之父道歉后,Linux社区颁布开发人员行为准则
  2. 【mybatis】时间范围 处理时间格式问题
  3. KandQ:单例模式的七种写法及其相关问题解析
  4. JS倒计时:从某个固定时间开始倒记
  5. 别让小小的“短信验证码”毁了用户体验
  6. java写 excel
  7. SCCM 2012 R2---安装前的准备工作
  8. AtomicInteger简介
  9. ice(Internet Communications Engine) window 安装与配置
  10. JSpider(3):JSpider的结构