adonetentityframework概述

上传人:第*** 文档编号:61714291 上传时间:2018-12-10 格式:PDF 页数:45 大小:1.21MB
返回 下载 相关 举报
adonetentityframework概述_第1页
第1页 / 共45页
adonetentityframework概述_第2页
第2页 / 共45页
adonetentityframework概述_第3页
第3页 / 共45页
adonetentityframework概述_第4页
第4页 / 共45页
adonetentityframework概述_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《adonetentityframework概述》由会员分享,可在线阅读,更多相关《adonetentityframework概述(45页珍藏版)》请在金锄头文库上搜索。

1、ADO.NET Entity FrameworkADO.NET Entity Framework概述 北京理工大学计算机学院北京理工大学计算机学院 金旭亮金旭亮 主要内容 What is Entity framework? 在Visual Studio 2012中使用EF DataBase-First开发 了解EF三大模型 Code-First开发 金旭亮数据存取技术系列课程 What is Entity framework?What is Entity framework? 金旭亮数据存取技术系列课程 Entity FrameworkEntity Framework Entity Frame

2、work(EF)是一个开源的“对象/ 关系映射(ORM:Object Relational Mapping)”框架,使应用程序可以使用一种 “纯”的对象模型来访问关系数据库中的数据。 EF是微软主推的数据存取技术,其他一些重要的 微软技术领域,比如ASP.NET MVC、WCF Data Service等,都使用EF构建数据存取层。 在实际开发中,现在通常使用EF来构建应用程序 的数据存取层。 金旭亮数据存取技术系列课程 EFEF的系统架构与基本原理 金旭亮数据存取技术系列课程 EF在底层使用ADO.NET data provider,因此, 它可以看成是对现有 ADO.NET技术的一个“增

3、强版”。 ADO.NET对数据库存取引 擎的封装较少,因此,开 发效率不如EF,但性能有 保证。 EF提供了更高层的抽象, 开发简单,使用灵活,但 性能比直接使用ADO.NET 会有损失(因为它多了一 个将LINQ查询转换为SQL 命令的步骤)。 EFEF的优点 开源,且有足够的资源投入,持续完善。 可以访问多种数据库(如Oracle、 IBM databases, SQL Anywhere、MySQL、SQLite、 VistaDB 等),但与SQL Server配合得最好。 更好地将应用程序与数据库结构隔离开了。 足够灵活:支持三种开发模式 金旭亮数据存取技术系列课程 既生瑜,何生亮 En

4、tity Framework vs LINQ to SQL 金旭亮数据存取技术系列课程 2 2 在Visual Studio Visual Studio 中使用EFEF 以VS2012+EF5.0为例介绍 金旭亮数据存取技术系列课程 DataBaseDataBase FirstFirst 金旭亮数据存取技术系列课程 实际开发中EFEF的四种开发模式 金旭亮数据存取技术系列课程 使用DataBaseDataBase- -FirstFirst模式开发 向项目中添加“ADO.NET Entity Data Model” 金旭亮数据存取技术系列课程 金旭亮数据存取技术系列课程 金旭亮数据存取技术系列课

5、程 生成实体对象模型 金旭亮数据存取技术系列课程 查看实体对象模型 右击可视化设计器 金旭亮数据存取技术系列课程 查看映射模型 金旭亮数据存取技术系列课程 如果数据库结构变更 金旭亮数据存取技术系列课程 添加视图 视图(View)将被看成是一种虚拟表,因此,导 入之后,将成独立的实体类 金旭亮数据存取技术系列课程 添加存储过程与函数 金旭亮数据存取技术系列课程 存储过程与函数将成为DbContext对象的公有方法 现场演示一 Demo:在Visual Studio中使用EF提取数据 深入了解DatabaseDatabase- -FirstFirst生成的数据模 型 Entity Data Mo

6、del(EDM)Entity Data Model(EDM) EDM来源于ERM(Entity Relationship Modeling ),ERM己有数十年历史,广泛应用 于数据库设计中。ERM定义了数据实体 (Entities)以及数据实体间的关系。 数据实体(Entities)并不是对象,它只是定义 了对象应该封装的“数据信息”,但并不定义对 象的行为特性。 有了ERMERM,为何还要EDMEDM? ERM主要用于数据库设计,而数据库设计的基本 原则与数据库应用程序是不一样的,前者关注的 是可维护性(maintainability),安全性 (security),效率(efficien

7、cy)和可伸缩性 (scalability)。 数据库应用程序则关注重用、数据模型的一致性, 可维护性,易于扩展和修改等。 Entity FrameworkEntity Framework的三种元数据类型 一个EDM其实就是一个XML文件,在运行时被 分为三个“子”文件,其中.csdl用于表达实体对 象。另两个用于保存与数据库交互所需的信息。 三大模型之“概念模型” 概念模型(Conceptual Model):主要体现为一组可以 被应用程序直接使用的类。 ADO.NET实体框架使用一种名 为“CSDL (Conceptual Schema Definition Language)”的语言来描

8、述这一 结构。 三大模型之“存储模型” 存储模型(Storage Model):主 要体现为一组与底层数据存储介质 (比如数据库系统)直接对应的类。 类似地,ADO.NET实体框架使用 一种名为“SSDL (Storage Schema Definition Language)” 的语言来描述这一结构。 三大模型之“概念- -存储模型映射” 概念-存储模型映射 (Conceptual- Storage Mapping),解决“概念模型” 中的类如何与“存储模型”中的类 相互对应的问题,我们使用 “MSL (Mapping Specification Language)”来描 述这一映射关系。

9、现场演示二 Demo:使用独立的类库封装数据存取层的功能 金旭亮数据存取技术系列课程 编译之后 注意: 需要主程序集的App.config中添加连接字串, 可以从类库中拷贝。 现场演示三 Demo:复用数据存取组件,在Web Forms网 页中显示数据 Demo:复用数据存取组件,在ASP.NET MVC 视图中显示数据 金旭亮数据存取技术系列课程 CodeCode- -FirstFirst 金旭亮数据存取技术系列课程 EFEF程序集 EF的核心程序集位于System.Data.Entity.dll.和 System.Data.Entity.dll中 支持CodeFirst的位于EntityF

10、ramework.dll中。 通常使用NuGet Package Manager来添加这些 程序集。 给项目添加Code FirstCode First支持 CodeCode- -firstfirst 如果没有数据库: 先写代码,自动创建数据库 如果代码有变化,自动删除数据库重建,或者 是使用迁移功能更改己有数据库。 如果己有数据库 使用EF PowerTools反向工程生成模型 金旭亮数据存取技术系列课程 下载EF Power Tools 创建示例项目及实体类 注意这些实体类是如何关联的 金旭亮数据存取技术系列课程 public class Blogpublic class Blog pub

11、lic public intint BlogIdBlogId get; set; get; set; public public string Name get; set; string Name get; set; public public virtual List Posts get; set; virtual List Posts get; set; public class public class PostPost public public intint PostIdPostId get; set; get; set; public string Title get; set;

12、public string Title get; set; public string Content get; set; public string Content get; set; public public intint BlogIdBlogId get; set; get; set; public public virtualvirtual Blog Blog BlogBlog get; set; get; set; 创建DbContextDbContext子类 下述代码执行时,将会自动创建数据库 金旭亮数据存取技术系列课程 public class public class Blo

13、ggingContextBloggingContext : : DbContextDbContext public public DbSetDbSet Blogs get; set; Blogs get; set; public public DbSetDbSet Posts get; set; Posts get; set; using (using (BloggingContextBloggingContext dbdb = new = new BloggingContextBloggingContext()() Console.WriteConsole.Write(“Enter a na

14、me for a new Blog: “);(“Enter a name for a new Blog: “); varvar name = name = Console.ReadLineConsole.ReadLine();(); varvar blog = new Blog Name = name ;blog = new Blog Name = name ; db.Blogs.Adddb.Blogs.Add(blog(blog);); db.SaveChangesdb.SaveChanges();(); 自动创建的数据库及表间的关联 金旭亮数据存取技术系列课程 控制数据库生成选项 默认情况

15、下,数据库名为“DbContext命名空 间.DbContext类名” 如果机器安装有SQL Express,则使用之,没有, 使用LocalDB. 自定义数据库名: 金旭亮数据存取技术系列课程 public class public class BloggingContextBloggingContext : : DbContextDbContext public public BloggingContextBloggingContext()() : base(“: base(“BloggingDatabaseBloggingDatabase“)“) 使用自定义数据库引擎 在App.config中定义连接字串: 金旭亮数据存取技术系列课程 在构造函数中指定连接字串名字: public class BloggingContext : DbContext public BloggingContext() : base(“BloggingCompactDatabaseBloggingCompactDatabase“) 如果实体类有变化了,怎样更新数据 库? 金旭亮数据存取技术系列课程 方式一:自动删除现有数据库后重新创建 首先创建一个派生自DropCreateData

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号