First Demo
实体框架Entity Framework,简称EF
EF是微软推出的基于Ado.Net的数据库访问技术,是一套ORM框架
底层访问数据库的实质依然是ado.net
是一套orm框架,即框架中包含了实例模型、数据模型、映射关系三部分
上下文类DbContext:内部封装了ado.net操作,用于对数据进行crud
子上下文类的属性,其实就是一个集合,可以通过父类中的DbSet<>属性获得,利于编写抽象代码

回顾查询语句执行顺序

()SELECT ()DISTINCT  ()<Top Num> <column>()FROM [left_table]()<join_type> JOIN <right_table>()        ON <join_condition>)WHERE <where_condition>()GROUP BY <group_by_list>()WITH <CUBE | RollUP>()HAVING <having_condition>()ORDER BY <order_by_list>

分页查询:Skip、Take(仅lambda,一定要先排序后使用此方法,lambda特有)
对于一个命令语句,可以将查询语法、方法语法混合使用
返回值:IQueryable<T>类型

新建实体数据模型,介绍生成的类型
目标:完成增加、修改、删除操作
增加:Add()
修改:AddOrUpdate()
删除:Remove();参数为一个对象,所以要先查找
方法SaveChanges():在完成增加、修改、删除、操作后,一定要调用此方法,将改变进行保存

导航属性
导航属性:当两张表有关系时,根据关系会在模型中生成相应的属性
如果是1的关系,则生成的是对应类型的属性
如果是n的关系,则生成的是ICollection<对应类型>的属性

延迟加载
进行查询时,只是将查询的命令进行拼接,构建命令树,并不会立即执行查询操作,在实际使用数据时才会执行查询返回结果
返回类型为IQueryable<T>或IEnumerable<T>
区别:
IQueryable<T>可以拼接命令树,即所有命令会构成一条sql执行
IEnumerable<T>不会拼接命令树,即只有第一个语句构成sql语句,然后把结果加载到内存中,再进行进一步筛选
使用AsQueryable()可以将查询结果转换成IQueryable<T>类型
使用AsEnumerable()可以将查询结果转换成Ienumerable<T>类型
集合类型的导航属性也采用延迟加载

禁用延迟加载
如果查询结果是个集合,在查询语句的结尾调用LoList()方法
如果查询结果是单个值,在查询语句的结尾调用FirstOrDefault()方法
对于导航属性,可以在查询结果上使用Include()方法

优点:用的时候才请求数据库获取数据,可以实时获得数据,适用于数据变化大的情况
缺点:每次用数据时才发出一次请求,增加了数据库的压力,对于数据变化小的情况不适用

Entity Framework part1的更多相关文章

  1. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  2. Entity Framework Core 1.1 升级通告

    原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...

  3. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  4. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  5. 来,给Entity Framework热热身

    先来看一下Entity Framework缓慢的初始化速度给我们更新程序带来的一种痛苦. 我们手动更新程序时通常的操作步骤如下: 1)把Web服务器从负载均衡中摘下来 2)更新程序 3)预热(发出一个 ...

  6. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  7. Entity Framework教程(第二版)

    源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...

  8. Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新

    因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...

  9. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

随机推荐

  1. es6+最佳入门实践(14)

    14.模版字符串 模版字符串(template string)是增强版的字符串,定义一个模版字符串需要用到反引号 let s = `这是一个模版字符串` console.log(s) 14.1.模版字 ...

  2. 转:Linux下使用Nginx搭建简单图片服务器

    最近经常有人问图片上传怎么做,有哪些方案做比较好,也看到过有关于上传图片的做法,但是都不是最好的,今天再这里简单讲一下Nginx实现上传图片以及图片服务器的大致理念. 如果是个人项目或者企业小项目,仅 ...

  3. saltstack入门至放弃之salt安装部署

    学习了一段时间的saltstack,是时候记录下了.友提:学习环境是两台centos_7.2_x64机器 系统初始化: 两台机器执行以下脚本即可(友提:两台服务器的主机名配置在/etc/hosts中, ...

  4. Opencv 学习笔记之——鼠标,进度条操作

    Opencv中提供一个鼠标调用的函数,SetMouseCallback()函数,它配合一个回调函数来实现鼠标操作的功能.   首先看一下SetMouseCallback的函数原型: c++: void ...

  5. Google Breakpad: 实战crash .

    Google Breakpad: 实战crash . http://blog.csdn.net/zm_21/article/details/24795205 C/C++程序最棘手的时候就是一个字“挂” ...

  6. 【luogu2574】xor的艺术

    一道无聊的线段树题,写着玩玩而已…… #include<bits/stdc++.h> #define N 1000010 #define lson (o<<1) #define ...

  7. 串行写队列的MYSQL大文本参数

    public void AsyncWriteDataBase() { var spName = ""; while (true) { try { var jsonText = Re ...

  8. hdu5790

    都快忘了在这类题的经典做法了…… 将字符串一个个的插入字典树,在字典树维护好有该前缀串s的最大编号字符串j,我们记作j控制了前缀串s 对于当前的第i个字符串,维护此时有当前每个字符串控制了多少个前缀串 ...

  9. AC日记——[JSOI2008]火星人prefix bzoj 1014

    1014 思路: 平衡树+二分答案+hash: 好了懂了吧. 代码: #include <cstdio> #include <cstring> #include <ios ...

  10. 只用120行Java代码写一个自己的区块链-2网络

    已经看完第一章的内容了吗,欢迎回来. 上一章我们介绍了关于怎么去编写自己的区块链,完成哈希和新块的校验.但是它只是在一个终端(结点)上跑.我们怎么样来连接其他结点以及贡献新的块呢,怎么样广播到其他结点 ...