ef的三种数据加载方式(代码片段)

心存善念 心存善念     2022-11-03     712

关键词:

EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy LoadingExplicit Loading都是延迟加载。

(一)延迟加载(默认):Lazy Loading使用的是动态代理,默认情况下,如果POCO类满足以下两个条件,EF就使用Lazy Loading:

  1. POCO类是Public且不为Sealed。
  2. 导航属性标记为Virtual。

  关闭Lazy Loading,可以将LazyLoadingEnabled设为false,如果导航属性没有标记为virtual,Lazy Loading也是不起作用的。

(二)贪婪加载:不设置导航属性为virtual,并且对导航属性使用Include,Eager Loading使用Include方法关联预先加载的实体。

(三)显示加载:不设置导航属性为virtual,并且对导航属性使用Reference(单个对象).Load()或Collection(对象集).Load()。Explicit Loading使用Entry方法,对于集合使用Collection,单个实体则使用Reference。

  

 public class Programm
    
        public static void Main()
        
            TestDbContext db = new TestDbContext();

            //延迟加载
            var res1 = db.Reservations;
            foreach (var item in res1)
            
                //do something
            

            //贪婪加载
            //有多个Include会全部完成加载,生成的sql命令是一条完成的
            var res2 = db.Reservations.Include(r => r.Details);

            //显示加载
            var res3 = db.Reservations.ToList();
            foreach (var item in res3)
            
                var temp = db.Entry(item);
                temp.Collection(i => i.Details).Load();
                temp.Reference(i => i.Customer).Load();
            
        
    

    public class Reservation
    
        public int ReservationId  get; set; 
        public string ClientName  get; set; 
        public string Location  get; set; 
        public List<ReservationDetails> Details  get; set; 
        public Customer Customer  get; set; 
    

    public class ReservationDetails
    
        public int Id  get; set; 
        public DateTime Time  get; set; 
    

    public class Customer
    
        public int Id  get; set; 
        public string Name  get; set; 
    

    public class TestDbContext : DbContext
    
        public DbSet<Reservation> Reservations  get; set; 
    

 

暂时COPY记录,有空再整理

原文:

http://www.cnblogs.com/peaceSouth/p/5813646.html

https://www.cnblogs.com/liangxiaofeng/p/5809301.html

http://www.cnblogs.com/nianming/archive/2013/01/09/2846952.html

类加载的三种方式比较(代码片段)

虚拟机加载类的途径1、由new关键字创建一个类的实例在由运行时刻用new方法载入如:Dogdog=newDog();2、调用Class.forName()方法通过反射加载类型,并创建对象实例如:Classclazz=Class.forName(“Dog”);Objectdog=clazz.newInstan... 查看详情

ef编程三种方式(代码片段)

1.DataBaseFirst2.ModelFirst3.CodeFirst这三种编程方式DataBaseFirst就是数据库优先,数据库先建立好表然后EF根据数据库表生成实体模型,这种方式使用简单,但不适合大型项目使用,这是为什么呢?因为假设数据库表经常变动更新数据库... 查看详情

反射:获取class对象的三种方式(代码片段)

获取Class对象的三种方式 packagelianxiApril18;/***获取Class对象的三种方式*1Object——>getClass();*2任何数据类型(包括基本数据类型)都有一个“静态”的class属性*3通过Class类的静态方法:forName(StringclassName)(常用)**/publicclassFans... 查看详情

检测数据类型的三种方式及区别(代码片段)

vara="iamstring";varb=[1,2,3];varc=newString("abc");//String类实例对象//typeof:null对象数组都是返回Object类型console.log(typeofa);//stringconsole.log(typeofb);//objectconsole.log(typeofc);//object//instanceof无法检测是字符 查看详情

python爬虫的三种数据解析方式(代码片段)

数据解析方式    -正则  -xpath  -bs4 数据解析的原理:标签的定位提取标签中存储的文本数据或者标签属性中存储的数据正则#正则表达式单字符:.:除换行以外所有字符[]:[aoe][a-w]匹配集合中任意一个字符\\d:数字[... 查看详情

大数据必学java基础(七十六):创建线程的三种方式(代码片段)

文章目录创建线程的三种方式一、继承Thread类二、实现Runnable接口三、实现Callable接口创建线程的三种方式一、继承Thread类在学习多线程之前,以前的代码是单线程的吗?不是,以前也是有三个线程同时执行的。现在... 查看详情

ef中的三种删除方式

1.第一种现查询对象是否存在:varobj=firstorDefault()=>如果对象存在context.users.Remove(obj); 根据sql发现;执行两次;第一次SELLECTTOP1*FROMUSERS; 第二次delete xx where; 第二种:自己创建id相同的实体;然后附加;attach,... 查看详情

poi导出excel的三种方式(代码片段)

原文链接:https://www.cnblogs.com/zhaoblog/p/7661245.htmlpoi导出excel最常用的是第一种方式HSSFWorkbook,不过这种方式数据量大的话会产生内存溢出问题,SXSSFWorkbook是一种大数据量导出格式,csv是另一种excel导出的一种轻快的实现。先介绍一... 查看详情

数据仓库系列之使用preparedstatement执行批量插入sql的三种方式(代码片段)

使用PreparedStatement(方式一):@Testpublicvoidtest1()Connectionconn=null;PreparedStatementps=null;trylongstart=System.currentTimeMillis();conn=DBUtil.getConnection();Stringsql= 查看详情

有关post的三种提交格式(代码片段)

有关数据提交格式前端从前端往后端传数据,有三种编码方式urlencoded:form表单的默认方式form-data:form表单中指定enctype,传文件的方式json:只能用ajax,指定ContenType实现其中,ajax也支持urlencoded,是ajax的默认方式fromdata,ajax也... 查看详情

bean无法被注入的常见问题和springboot的三种扫描并加载bean方式(代码片段)

一、bean无法被注入的常见问题某个类中的成员,如果是采用@Autowired注入SpringBean,则当前类的实例,必须也是SpringBean才能成功注入,即该实例不能用newxxx()来获得,这种方式获得的实例无法调用@Autowired... 查看详情

markdownjs库的三种使用方式(代码片段)

查看详情

获得类的字节码对象的三种方式(代码片段)

java源码(xxx.java)通过编译后形成字节码文件,字节码文件通过类加载器获得字节码对象,通过字节码对象可以操作源码中的属性和方法。方式一,使用类的class属性: Class<java.util.Date>clazz1=java.util.Date.class; 方式二,... 查看详情

springboot整合mybatis实现数据库操作的三种方式(代码片段)

前提:使用MySql数据库一、引进依赖方式一:在构建项目时,通过选择方式引入方式二:配置pom.xml方式<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter&l 查看详情

rdd的三种创建方式(代码片段)

由一个已经存在的Scala集合创建。valseq:immutable.Seq[Int]=1.to(10)valrdd1:RDD[Int]=sc.parallelize(seq)由外部存储系统的文件创建。包括本地的文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase等。//读取外部文件系... 查看详情

rdd的三种创建方式(代码片段)

由一个已经存在的Scala集合创建。valseq:immutable.Seq[Int]=1.to(10)valrdd1:RDD[Int]=sc.parallelize(seq)由外部存储系统的文件创建。包括本地的文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase等。//读取外部文件系... 查看详情

view的三种滑动方式(代码片段)

 这一节我想记录的是View的三种滑动方式,但这三种滑动方式基本上不是弹式滑动  一.使用scrollTo/scrollBy   先看一下scrollTo和scrollBy的源码是如何实现的/***Setthescrolledpositionofyourview.Thiswillcauseacallto*@link#onScrollC... 查看详情

keras的三种建模方式(代码片段)

keras是google公司2016年发布的tensorflow为后端的深度学习网络的高级接口。三种建模方式:序列模型、函数模型、子类模型第一种序列模型:importnumpyasnpfromtensorflow.examples.tutorials.mnistimportinput_datafromkeras.modelsimportSequentialfromker... 查看详情