EF中加载实体的方式
EF中的查询执行时机:
1. foreach进行枚举
2. ToArray、ToList、ToDictionary
3. Linq的一些操作,如First、Any
4. DbSet上的Load操作。DbEntityEntry.Reload和Database.ExecuteSqlCommand
在web application中,每一个请求使用一个context实例;在WPF中,每个form使用一个context实例
context不是线程安全的
加载实体的方式:
1.贪婪加载(eager loading)
2.延迟加载(lazy loading)
3.显示加载(explicit loading)
贪婪加载实现是通过include方法实现的
1 using (var context = new BloggingContext()) 2 { 3 // Load all blogs and related posts 4 var blogs1 = context.Blogs 5 .Include(b => b.Posts) 6 .ToList(); 7 8 // Load one blogs and its related posts 9 var blog1 = context.Blogs 10 .Where(b => b.Name == "ADO.NET Blog") 11 .Include(b => b.Posts) 12 .FirstOrDefault(); 13 14 // Load all blogs and related posts 15 // using a string to specify the relationship 16 var blogs2 = context.Blogs 17 .Include("Posts") 18 .ToList(); 19 20 // Load one blog and its related posts 21 // using a string to specify the relationship 22 var blog2 = context.Blogs 23 .Where(b => b.Name == "ADO.NET Blog") 24 .Include("Posts") 25 .FirstOrDefault(); 26 }
View Code
延迟加载通过virtual关键字进行实现(当EF框架禁用了延迟加载,这种方式就无效了)
1 public class Blog 2 { 3 public int BlogId { get; set; } 4 public string Name { get; set; } 5 public string Url { get; set; } 6 public string Tags { get; set; } 7 8 public virtual ICollection<Post> Posts { get; set; } 9 } 10 11 //禁用延迟加载 12 public class BloggingContext : DbContext 13 { 14 public BloggingContext() 15 { 16 this.Configuration.LazyLoadingEnabled = false; 17 } 18 }
View Code
当禁用了延迟加载后或不使用延迟加载时,通过显示加载仍然可以获取管理的数据
1 using (var context = new BloggingContext()) 2 { 3 var post = context.Posts.Find(2); 4 5 // Load the blog related to a given post 6 context.Entry(post).Reference(p => p.Blog).Load(); 7 8 // Load the blog related to a given post using a string 9 context.Entry(post).Reference("Blog").Load(); 10 11 var blog = context.Blogs.Find(1); 12 13 //一对多时使用Collection 14 // Load the posts related to a given blog 15 context.Entry(blog).Collection(p => p.Posts).Load(); 16 17 // Load the posts related to a given blog 18 // using a string to specify the relationship 19 context.Entry(blog).Collection("Posts").Load(); 20 } 21 22 //使用Query方式进行一些过滤 23 using (var context = new BloggingContext()) 24 { 25 var blog = context.Blogs.Find(1); 26 27 // Load the posts with the 'entity-framework' tag related to a given blog 28 context.Entry(blog) 29 .Collection(b => b.Posts) 30 .Query() 31 .Where(p => p.Tags.Contains("entity-framework") 32 .Load(); 33 34 // Load the posts with the 'entity-framework' tag related to a given blog 35 // using a string to specify the relationship 36 context.Entry(blog) 37 .Collection("Posts") 38 .Query() 39 .Where(p => p.Tags.Contains("entity-framework") 40 .Load(); 41 }
View Code
转载于:https://www.cnblogs.com/goodlucklzq/p/4665899.html
EF中加载实体的方式相关推荐
- Android中加载事件的方式
Android中加载事件的方式 通过内部类的方式实现 通过外部类的方式实现 通过属性的方式实现 通过自身实现接口的方式实现 通过内部类的方式实现 Demo btn_Login.setOnClickLi ...
- Spring中加载xml配置文件的六种方式
Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog 因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...
- Spark-SQL从MySQL中加载数据以及将数据写入到mysql中(Spark Shell方式,Spark SQL程序)
1. JDBC Spark SQL可以通过JDBC从关系型数据库中读取数据的方式创建DataFrame,通过对DataFrame一系列的计算后,还可以将数据再写回关系型数据库中. 1.1. 从MySQ ...
- spark mysql 写_Spark-SQL从MySQL中加载数据以及将数据写入到mysql中(Spark Shell方式,Spark SQL程序)...
1. JDBC Spark SQL可以通过JDBC从关系型数据库中读取数据的方式创建DataFrame,通过对DataFrame一系列的计算后,还可以将数据再写回关系型数据库中. 1.1. 从MySQ ...
- Java中加载配置文件方式的总结
当需要在Java中加载配置文件的时候,有几个选项提供选择: · File · Class.getResourceAsStream · Class.getCla ...
- 浅谈android中加载高清大图及图片压缩方式(二)
这一讲就是本系列的第二篇,一起来聊下关于android中加载高清大图的问题,我们都知道如果我们直接加载原图的话,一个是非常慢,需要等待一定时间,如果没有在一定的时间内给用户响应的话,将会极大影响用户的 ...
- 高德地图 Vue 中 加载 数据可视化 Loca 的方式
高德地图 Vue 中 加载 数据可视化 Loca 的方式 今天想用 Loca 试试如何的,结果怎么都加载不上,我的代码是这样的 AMapLoader.load({key: "这个就不展示了& ...
- android加载声音文件,Android是在应用程序中加载和播放声音的最快方式
我正在开展一个项目,我必须在一个活动中加载6种不同的声音,并在按钮点击时播放所有声音.声音文件不是那么大,但问题是它们可能会更多.所以我的问题是这是在单个活动中加载声音文件的最快方法.出于测试目的,我 ...
- linux内核采取,采用动态加载模块的方式Linux内核编译
Linux内核是一种单体内核,但是通过动态加载模块的方式,使它的开发非常灵活方便.那么,它是如何编译内核的呢?我们可以通过分析它的Makefile入手.以下是一个简单的hello内核模块的Makefi ...
最新文章
- 精选180+Python开源项目,随你选!做项目何愁没代码
- 一句话总结人工神经网络
- awk 分隔符 多个空格_如何在awk中指定多个分隔符
- 【转】体验 Silverlight 5 3D开发之环境搭配篇
- java jsch 密钥登陆_我们可以使用JSch进行基于SSH密钥的通信吗?
- linux下xargs命令用法详解
- [Leetcode][第201题][JAVA][数字范围按位与][位运算][Brian Kernighan]
- 采用Docker集成jquery-file-upload组件到WEB应用
- 为了解决架构的问题,我们需要先理解敏捷的真谛
- Docker-----Cgroup资源配置详细教程,图文并茂
- 谷歌浏览器不能用_正在用 Chrome 或 Edge 浏览器的你,不能错过这亿个好用插件...
- mysql免安装版教程视频_MySQL免安装版安装教程
- PostgreSQL视图和物化视图
- bat脚本_更改文件夹访问权限
- HTTP协议理解及服务端与客户端的设计实现
- 移动应用的必杀技:超级app+轻应用
- 4和2大于号小于号箭头那边_小于号怎么打键盘(大于小于号怎么区分)
- python笔记更新(网络编程)
- VGPNet:基于灭点的道路和路面标志的检测与识别
- 数学建模比赛经验总结
热门文章
- keras cnn注意力机制_从发展历史视角解析Transformer:从全连接CNN到Transformer
- Java的Arrays.sort()良心总结
- mysql错误1451_mysql错误代号-J(1451~1494)
- 【linux技术】分布式存储技术实战演练
- 盘点2020年10个最难忘的数据泄露事件
- 【实验】不会部署VRRP?看完就会了
- linux抓源地址,【Linux】apt-get 源地址汇总
- Dubbo 在 K8s 下的思考
- modbus协议和串口服务器,Modbus RTU通信模式与Modbus ASCII通信模式的异同点
- 多少分才能考上重庆计算机学校,重庆多少分能上985大学?重庆985院校分数线是多少?(2021年参考)...