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 ...
- URAL —— 1255 & HDU 5100——Chessboard ——————【数学规律】
用 k × 1 的矩形覆盖 n × n 的正方形棋盘 用 k × 1 的小矩形覆盖一个 n × n 的正方形棋盘,往往不能实现完全覆盖(比如,有时候 n × n 甚至根本就不是 k 的整倍数). 解题 ...
- [转]ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器
本文转自:http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-4_4_3-filters.html 原文:Filters 作者:Steve Smith 翻 ...
- Win2D 官方文章系列翻译 - 预乘 Alpha
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-premultiplied-alpha/ 在计算机绘图中有两种表示颜色值不透明度的方法.Win2D 中两种方法 ...
- 使用Razor
新建一个名称为Rezor的mvc空项目,定义一个模型内容 public class Product { //定义模型 public int ProductID { get; set; } public ...
- [转]谷歌Chrome浏览器开发者工具教程—JS调试篇
来源:http://blog.csdn.net/cyyax/article/details/51242720 上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工 ...
- Thrift笔记(一)--Hello Demo
Thrift是一个RPC框架 1. 用IDL定义好实体和服务框架,如实体字段名,类型等.服务名,服务参数,返回值等 2. 通过编译器或者说代码生成器生成RPC框架代码 IDL语法,代码生成器的安装使用 ...
- Protocol Buffers教程
今天想比较下pb和fastjson两个序列化后的大小.再看了一下pb序列化 pb官网:https://developers.google.com/protocol-buffers/ pb是啥 What ...
- Java集合篇三:Vector
package com.test.collection; import java.util.Vector; public class MyVector { /** * @param args */ p ...
- 支持触屏的jQuery轮播图插件
移动轮播图我看到两类, 一款是无线天猫的m.tmall.com和携程,实现了无缝轮播. 一款是蘑菇街的,没有实现无缝轮播. 我自己重写一个,类似天猫. 1.页面代码 <!DOCTYPE html ...