ADO.NET 之 Entity Framework 基础
Entity Framework(EF)是使用直接映射到应用程序中业务对象的对象模型于关系数据库进行交互。它没有将数据视为行和列的集合,而是将其视为强类型对象(成为实体)的集合。
术语:LinQ to Entity 是指ADO.NET EF实体对象使用LINQ查询。 LINQ TO SQL 与 ADO.NET EF接近,但使用的情况很少,有一次使用LinQ to SQL 做过一个小网站,感觉比三层使用方便一些,但数据量不大也就无所谓了。 LinQ to SQL 查询 的介绍。
EF模式会使代码库显得复杂,如果你掌握LINQ,使用EF还是很好的。小量数据可以还是使用以前的,如果数据量比较大使用EF就很好。
实体的作用
强类型称为实体。正式名称为 实体数据模型 (EDM) 。它是一组映射到物理数据库的客户端类,但是这些实体没有必要与数据库架构的命名约定完全一致。你可以根据具体的情况该名称,定义不同的属性名,这些属性讲映射到目标表的各个列。
在大多数情况下,客户端实体类的名称都与关系型数据库表相同,你也可以修改它的名称,主要看情况。
Entity Framework 的基础知识
EF API 的两个关键部分为 对象服务 和 实体客户端。
①对象服务的作用
对象服务是EF中的一部分,它在代码中对客户端实体进行控制。例如:对象服务跟踪你对实体的更改(如将汽车的颜色由绿色改为红色),管理实体间的关系(如查找用户Steve Hagen的所有订单)并提供将更改保存到数据库的方法,以及用XML或二进制序列化服务对实体状态进行持久化的方法。
对象服务层对所有扩展EntityObject基类的类进行管理,EntityObject是EF编程模型中所有实体类的基类。
②实体客户端的作用
EF API的另一个主要部分是实体客户端,它使用基本的ADO.NET数据提供程序来建立数据库连接,基于实体状态和LINQ查询生成SQL语句、将数据库数据映射到实体。
System.Data.EntityClient的命名空间中浏览实体客户端层的功能。包含了一些的类。

可以看出这些类(EntityCommand和EntityConnection)与ADO.NET数据提供程序中的类惊人地相似。
如果你需要更大程度地控制实体客户端基于Linq查询创建SQL语句的方式,你可以使用Entity SQL。它是直接作用于实体的与数据库无关SQL方言。
③*.edmx文件的作用
实体、真正的数据库以及映射层都会被划分为3个相关的部分:概念模型、逻辑模型和物理模型。
① 概念模型定义实体以及他们之间的关系(如果有的话)
②逻辑模型将实体和关系(通过外键约束)映射到表
③ 物理模型通过指定的存储细节(如表架构、表分割和索引)来表示特定的数据引擎的能力
在EF的世界里,这三层存存放在基于XML格式的文件里。
*.edmx 文件将生成3个独立的文件:用于概念模型数据的*.csdl、用于物理模型的*.ssdl、和用于映射层的*.msl.然后这三个基于XML的文件将以二进制资源的形式绑定到应用程序。
④ 书中使用的是4.0版本的,有点老了。。。。。 后面低版本更新为 DbContext和DbSet<T>了 代码演示的就DbContext个DbSet<T>了
ObjectContext和ObjectSet<T>类的作用
EF的最后一个难点是ObjectContext类,他是 System.Data.Object命名空间的一员。在生成*.emdx文件时,你将得到映射到数据库表的实体类和一个继承自ObjectContext类。该类通常用于对象服务于实体客户端之间的交互。
ObjectContect的常用成员






ObjectContent的派生类作为一个容器,管理哪些存储在ObjectSet<T>集合中的实体对象。例如:你在AutoLot数据库的Car表生成*.edmx文件,你会的得到一个AutoLotEntities类。
该类包含一个Cars属性(复数形式),它封装ObjectSet<Car>类型的数据成员。Orsers表创建一个EDM,AutoLotEntitesl类将定义另一个Orders属性,还封装ObjectSet<Order>类型的成员变量。
System.Data.ObjectSet<T>的一些常用成员



如果对LinQ To SQL有了解的话这个位置就很好了解了,基本一样。
创建和分析EDM



解决方案资源管理器里面

这个并不能让我们很好了解EDM,我们需要借助模型浏览器来帮助我们。
视图——》其他窗口——》实体数据模型浏览器
主要是模型,表等一些的介绍

可以修改属性

视图——》其他窗口——》实体数据模型映射详细信息

查看生成d*.edmx文件的数据
右键决解方案中的NewsEDM.edmx打开方式
、



查看生成的源代码


补充:
System.Data.Entity;
DbContext类的介绍


Entry这个方法一般可以用来改变实体的状态

DbEntityEntry 在命名空间 System.Data.Entity.Infrastructure

这个常用
返回的是 EntityState,是个枚举类型

一般这么用
context.Entry<News>(news的实例).State = EntityState.Deleted; //把你需要改变的类传到这个方法里面然后改变状态最后提交到数据库中就可以了
DbSet<T>类 context.News————》返回的就是 DbSet<News>




对概念模型进行编程
添加
//新建一个实例
using (NewsDBEntities context=new NewsDBEntities())
{
try
{
//添加一个新类到上下文
context.News.Add(new News() { CateID = , Contents = "测试类容", CreateDate = DateTime.Now, Title = "测试标题" });
context.SaveChanges(); //保存到数据库 如同执行了一条SQL Insert语句
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException.Message); }
}
数据库中多了一条信息

删除
//新建一个实例
using (NewsDBEntities context=new NewsDBEntities())
{
//找到你需要删除的信息 //①
News dd = context.News.First(x => x.NewsID == );
context.Entry<News>(dd).State = EntityState.Deleted; //改变状态 这里或者给强类型,看具体情况
//context.Entry(dd).State = EntityState.Deleted = context.News.Remove(newDel) 一个意思 //② 注意LinQ查询 返回单个
News newDel = context.News.Where(x => x.NewsID == ).First();
context.News.Remove(newDel); context.SaveChanges(); //提交数据库
}
更新
把需要更新的数据找出来,然后改变属性直接提交到数据库

查询就跟LinQ查询一回事。这里就只是演示了简单的增删改查。
总结:这里只是简单的了解了一下EF,到时候会继续学习更深层的。
ADO.NET 之 Entity Framework 基础的更多相关文章
- Entity Framework 基础
在忙碌中渡过了5,6,7 月份,现在些抽点时间对Entity Framework的使用做一些基础的回忆. Entity Framework 是什么? Entity Framework(EF)和我们所熟 ...
- Entity Framework基础01
学习了ADO.NET的相关知识,掌握了它对数据库表的基本操作,但是实际在开发项目应用中微软为我们开发ef这个ORM,使用它可以很方便的利用ADO.NET来操作DBMS,使得我们开发项目的着重点放在业务 ...
- Entity Framework 基础操作(1)
EF是微软推出的官方ORM框架,默认防注入可以配合LINQ一起使用,更方便开发人员. 首先通过SQLSERVER现在有的数据库类生产EF 右键->添加->新建项,选择AOD.NET实体数据 ...
- Entity Framework 基础知识走马观花
本文目录: 一.EF中的edmx文件探秘 二.EF中的代理模式探秘 三.EF中的延迟加载与即时加载 一.EF中的edmx文件 1.1 emdx文件本质:一个XML文件 (1)通过选择以XML方式打开e ...
- ADO.Net和Entity Framework的区别联系
它们有以下几点区别:1,ADO.Net是开发人员自己select.update等写sql语句,来实现对数据库的增删改查等操作:采用EF进行开发操作数据库的时候,只需要操作对象,这样做使开发更方便,此时 ...
- Entity Framework基础
http://blog.csdn.net/hurtlingsnail/article/details/53113934
- 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库
目的 本教程介绍如何使用 Entity Framework.语言集成查询 (LINQ),以及如何对 Oracle 数据库使用 Model-First 以生成数据定义语言 (DDL) 脚本. 所需时间 ...
- Entity Framework 教程——概述
Entity Framework 基础 本教材将手把手教你使用entity framework,我们将使用entity framework 6.0和visual studio 2012. 以下表格是e ...
- 8天掌握EF的Code First开发之Entity Framework介绍
返回<8天掌握EF的Code First开发>总目录 本篇目录 Entity Framework概要 什么是ORM Entity Framework简史 Entity Framework具 ...
随机推荐
- innosetup卸载软件后,删除定时任务schedule task
代码如下: //innosetup自带的方法,当卸载软件时,根据卸载的状态改变时而触发 procedure CurUninstallStepChanged(CurUninstallStep: TUni ...
- linux下统计文本行数的各种方法(二)
上一篇讲的都是统计单个文件的方法,直接在命令行执行就可以.现在试试脚本的方式,统计多个文件的行数 一.统计目录下所有文件的文件数及所有行数 脚本暂时命名为count.sh,代码如下: #!/bin/b ...
- 腾讯蔡晨:十年沉淀,腾讯iOA为企业安全保驾护航
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会再广州召开,广东省各级政府机构领导.海 ...
- vue2.0 饿了么项目学习总结
最近在GitHub上发现一个基于vue2.0的饿了么项目.本着互联网的分享精神,现在将我自己所理解的,所总结的经验分享给大家.本篇文字我将从学习的角度向大家分享. 在学习本项目之前我已经将vue2.0 ...
- 关于controller和apicontroller的跨域实现过滤器的不同
1.controller的跨域访问 filter的实现请继承System.Web.Mvc.ActionFilterAttribute 2.apicontroller的跨域访问 filter的实现请继承 ...
- BZOJ5249: [2018多省省队联测]IIIDX(线段树 贪心)
题意 题目链接 Sol 不难发现题目给出的是一个树,其中\(\frac{i}{K}\)是\(i\)的父亲节点 首先,当\(d_i\)互不相同时,一个显然的贪心策略就是优先给编号小的分配较大的权值.可以 ...
- 微信小程序入门案例
本文通过具体的实例记录微信小程序的入门知识. 1.特点 不需要安装 依赖微信应用 更接近原生APP 丰富的框架及API可达到快速开发的目的 2.工具使用 在开发的过程中可以使用微信开发者工具,更加直观 ...
- 使用jquery去掉时光轴头尾部的线条
一.前言:以前做类似时光轴的结构,几乎都是一条灰色线飞流直下,没有尽头.今天这个线条是从第一个圆点到最后一个圆点,那么问题来了,内容的高度还不是固定的,线条的长度怎么确定?怎么就能刚刚好从第一个点到最 ...
- css一个很好用的hover显示
之前一直想在样式实现,hover时显示其他div,今天终于找到了,(*^▽^*) .a悬停时显示.b .a:hover .b { display: block; }
- HCNA配置静态LACP模式链路聚合
1.静态LACP模式 静态LACP模式是一种利用LACP协议进行聚合参数协商.确定活动接口和非活动接口的链路聚合方式.该模式下,需手工创建Eth-Trunk,手工加入Eth-Trunk成员接口,由LA ...