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具 ...
随机推荐
- 用PHP实现同一个帐号不允许同时登陆,只允许一个帐号登录?
数据库表 user_login_info 字段:id,user_ip,user_id,last_access_time user_id 做唯一性索引 1. 用户登录后 如果没有当前用户的数据,插入一条 ...
- uwsgi服务启动、关闭、重启操作
1. 添加uwsgi相关文件 在之前的文章跟讲到过centos中搭建nginx+uwsgi+flask运行环境,本节就基于那一次的配置进行说明. 在www中创建uwsgi文件夹,用来存放uw ...
- Python编码规范杂记(很乱:))
Python编码规范 导入模块 每一个(第三方)模块的导入都需要两个import语句, 如下 使用import some的方式导入模块, 如果有还有子模块的话, 则from father.son im ...
- [DForm]我也来做自定义Winform之另类标题栏重绘
据说得有楔子 按照惯例,先来几张样例图(注:为了展示窗口阴影效果,截图范围向外扩展了些,各位凭想象吧). 还要来个序 其实,很多年没写过Winform了,前端时间在 ...
- 如何取得GridView被隐藏列的值
如何取得GridView被隐藏列的值 分类: ASP.net 2009-06-25 12:47 943人阅读 评论(1 ...
- 05.File类的学习
File 是文件的意思 File类是一个静态类,所以File类是一个工具类 File类是专门操作文件的类 File的常用方法 namespace _16.File类的学习 { class Progr ...
- 【实用类String】String类方法的应用案例:查找判断指定字符出现的次数和位置
一.应用要求 输入一个字符串,再输入要查找的字符,判断该字符在该字符串中出现的次数. 二.实现思路 1.使用substring()方法将字符串的每个字符存入数组 2.比较数组每个字符是否与指定的字符相 ...
- 从零开始编译属于你的FFmpeg
一.前提: 编译FFmpeg可以是初学者,尤其是对C语言项目,Linux编译不熟悉的的初学者的一道门槛. 我曾经找过很多博客,文章,有些能编译成功,有些则不能.编译通过,能够运行也是云里雾里的.其实最 ...
- Django之(URL)路由系统
路由系统 简而言之,django的路由系统作用就是使views里面处理数据的函数与请求的url建立映射关系.使请求到来之后,根据urls.py里的关系条目,去查找到与请求对应的处理方法,从而返回给客户 ...
- 2、Dubbo源码解析--服务发布原理(Netty服务暴露)
一.服务发布 - 原理: 首先看Dubbo日志,截取重要部分: 1)暴露本地服务 Export dubbo service com.alibaba.dubbo.demo.DemoService to ...