1.在调试的时候,查看EF生成的SQL语句

在Context类的构造函数中添加以下代码,就可以在调试的时候在【输出】窗口中看到SQL语句

this.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

2.EF关联数据加载

EF中有三种方式处理关联实体的数据加载:预加载,懒加载,显示加载

现在有两个类

public class Book
{
public int BookId { get; set; }
[ForeignKey("AuthorId")]
public Author Author { get; set; }
} public class Author
{
public int AuthorId { get; set; }
[Required]
public string Name { get; set; }
}

预加载:

普通查询

public IQueryable<Book> GetBooks()
{
return db.Books;
}

返回结果

[
{"BookId": 1,"Author": null},
{"BookId": 2,"Author": null}
]

EF没有加载跟Book相关联的表Author。

现在我们使用Include进行预加载,使关联实体作为一个整体进行数据库查询

public IQueryable<Book> GetBooks()
{
return db.Books.Include(b => b.Author);
}

返回结果

[
{
"BookId": ,
"Author": {
"AuthorId": ,
"Name": "Ralls, Kim"
}
}
]

延迟加载:

在实体类的关联属性上添加virtual关键字即可启用延迟加载

public class Book
{
public int BookId { get; set; }
[ForeignKey("AuthorId")]
public virtual Author Author { get; set; }
}

现在执行查询

var books = db.Books.ToList();  // book对象中没有author数据
var author = books[].Author; // 加载books[0]的author

查询主表的时候,不会带有关联表数据,直到有访问关联对象的时候,才会查询。这里有个问题就是 像上面的查询,虽然只访问的第一本书的作者,但会查询所有的作者,并且是根据Book列表中存的AuthorId,一条一条的这个查询。

所以如果使用延迟加载,对字段的序列化要谨慎对待(可以通过使用DTO解决这个问题)。

关于EF数据访问的文章:这里

EF深入系列--细节的更多相关文章

  1. 【Basics of Entity Framework】【EF基础系列1】

    EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...

  2. EF中的开放式并发(EF基础系列--28)

    好久没更新EF这个系列了,现在又重新开始. 这次学习,开放式并发.首先拿出数据库脚本: 说明一下,这个数据库脚本是之前的章节中稍作修改的: USE [SchoolDB] GO /****** Obje ...

  3. 9.翻译:EF基础系列---使用EF开发的方式有哪些?

    原文链接:http://www.entityframeworktutorial.net/choosing-development-approach-with-entity-framework.aspx ...

  4. 1.翻译:EF基础系列--什么是Entity Framework?

    大家好,好久不见,EF系列之前落下了,还是打算重新整理一下. 先说说目前的打算:先简单了解一下EF基础系列-->然后就是EF 6 Code-First系列-->接着就是EF 6 DB-Fi ...

  5. 10.翻译:EF基础系列---EF中的持久性

    原文链接:http://www.entityframeworktutorial.net/EntityFramework4.3/persistence-in-entity-framework.aspx ...

  6. 一个官翻教程集合:ASP.NET Core 和 EF Core 系列教程

    通过一个大学课程案例讲解了复杂实体的创建过程及讲解 1.ASP.NET Core 和 Entity Framework Core 系列教程——入门 (1 / 10) 2.ASP.NET Core 和 ...

  7. 安装Entity Framework【Setup Entity Framework Environment】(EF基础系列篇4)

    Entity Framework 5.0 API是分布在两个地方:NuGet和.NET Framework中,这个.NET framework 4.0/4.5包含EF核心的API,然而通过NuGet包 ...

  8. EF Core系列

    一. 二. 三. 系列章节 第一节:EF Core简介和CodeFirst和DBFirst两种映射模式(以SQLite和SQLServer为例) 第X节:XXXXXXXXXXXXXXXXXXXXXXX ...

  9. 6.翻译:EF基础系列---什么是EF中的实体?

    原文地址:http://www.entityframeworktutorial.net/basics/what-is-entity-in-entityframework.aspx EF中的实体就是继承 ...

随机推荐

  1. Snippet: Fetching results after calling stored procedures using MySQL Connector/Python

    https://geert.vanderkelen.org/2014/results-after-procedure-call/ Problem Using MySQL Connector/Pytho ...

  2. 下载https协议需要的cer证书

    一:https简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全 ...

  3. Linux命令速查手册,超详细Linux命令教程

    一.常用命令速查 ls cd pwd cat more less tail head cp scp mv mkdir rmdir touch rm ps kill top free clear tre ...

  4. GJM : Lua 语言学习笔记

    Lua笔记 容易与C/C++整合 Lua所提供的机制是C所不善于的:高级语言,动态结构,简洁,易于测试和调试. Lua特有的特征: `1:可扩展性.卓越的扩展性导致了很多人将Lua用作搭建领域语言的工 ...

  5. AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

    ERROR The request could not be satisfied. Bad request. Generated by cloudfront (CloudFront) Request ...

  6. css3中的前缀

    css3中: -o-:opera -moz:firefox -webkit:safari chrome -ms:IE9

  7. 25款专业的 WordPress 电子商务网站主题

    WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许多第三方开发的免费模板,安装方式简单易用.这篇文章和大家分享35款专业的 WordPress 电子商务网 ...

  8. 【javascript激增的思考03】MVVM与Knockout

    前言 今天搞的有点快,因为上午简单研究了下MVC,发现MVC不太适合前端开发,然后之前看几位前端前辈都推荐前端使用MVVM,但是我对其还不甚了解,所以我觉得下午还是应该先看看他是神马先,后面再决定要不 ...

  9. mysql win源码比较大 不需要的文件删除 记录下来

    mysql-5.6.25-win32.zip 从官方下载下来的大小为 343MB,太大了可以删除掉的地方记录一下 docs :全部删除. sql-bench:全部删除. mysql-test :全部删 ...

  10. [DeviceOne开发]-地区选择

    一.简介 该demo主要通过do_ComboBox和do_Picker的selectChanged事件,实现省市县三级联动的功能 二.效果图 三.源码地址 https://github.com/do- ...