赞
踩
目录
ORM:Object Relation Mapping ,通俗说:用操作对象的方式来操作数据库。
插入数据库不再是执行Insert,而是类似于Person p = new Person();p.Age=3;p.Name="英莱特";db.Save(p);这样的做法。
ORM工具有很多Dapper、PetaPoco、NHibernate,最首推的还是微软官方的Entity Framework,简称EF。
EF底层仍然是对ADO.Net的封装。EF支持SQLServer、MYSQL、Oracle、Sqlite等所有主流数据库。
使用EF进行数据库开发的时候有两个东西建:建数据库(T_Persons),建模型类(Person)。根据这两种创建的先后顺序有EF的三种创建方法:
DataBase First(数据库优先):先创建数据库表,然后自动生成EDM文件,EDM文件生成模型类。简单展示一下DataBase First 的使用。
Model First(模型优先):先创建Edm文件,Edm文件自动生成模型类和数据库;
Code First(代码优先):程序员自己写模型类,然后自动生成数据库。没有Edm。
DataBase First 简单、方便,但是当项目大了之后会非常痛苦;
Code First 入门门槛高,但是适合于大项目。
Model First……
无论哪种First,一旦创建好了数据库、模型类之后,后面的用法都是一样的。业界都是推荐使用Code First,新版的EF中只支持Code First,因此我们这里只讲Code First。
Code First的微软的推荐用法是程序员只写模型类,数据库由EF 帮我们生成,当修改模型类之后,EF 使用“DB Migration”自动帮我们更改数据库。但是这种做法太激进,不适合很多大项目的开发流程和优化,只适合于项目的初始开发阶段。Java的Hibernate 中也有类似的DDL2SQL 技术,但是也是用的较少。“DB Migration”也不利于理解EF,因此在初学阶段,我们将会禁用“DB Migration”,采用更实际的“手动建数据库和模型类”的方式。
如果大家用过 NHibernate 等ORM 工具的话,会发现开发过程特别麻烦,需要在配置文件中指定模型类属性和数据库字段的对应关系,哪怕名字完全也一样也要手动配置。使用过Java 中Struts、Spring 等技术的同学也有过类似“配置文件地狱”的感觉。 像ASP.Net MVC 一样,EF 也是采用“约定大于配置”这样的框架设计原则,省去了很多配置,能用约定就不要自己配置。
在.Net Framework SP1微软包含一个实体框架(Entity Framework),此框架可以理解成微软的一个ORM产品。用于支持开发人员通过对概念性应用程序模型编程(而不是直接对关系存储架构编程)来创建数据访问应用程序。目标是降低面向数据的应用程序所需的代码量并减轻维护工作。
Entity Framework应用程序有以下优点:
应用程序可以通过更加以应用程序为中心的概念性模型(包括具有继承性、复杂成员和关系的类型)来工作。
应用程序不再对特定的数据引擎或存储架构具有硬编码依赖性。
可以在不更改应用程序代码的情况下更改概念性模型与特定于存储的架构之间的映射。
开发人员可以使用可映射到各种存储架构(可能在不同的数据库管理系统中实现)的一致的应用程序对象模型。
多个概念性模型可以映射到同一个存储架构。
语言集成查询支持可为查询提供针对概念性模型的编译时语法验证。
实体框架Entity Framework是 DO.NET中的一组支持开发面向数据的软件应用程序的技术。在EF中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。
概念架构定义语言文件 (.csdl) -- 定义概念模型。
存储架构定义语言文件 (.ssdl) -- 定义存储模型(又称逻辑模型)。
映射规范语言文件 (.msl) -- 定义存储模型与概念模型之间的映射。
实体框架使用这些基于XML的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM甚至支持将概念模型中的实体映射到数据源中的存储过程。它提供以下方式用于查询 EDM 并返回对象:
LINQ to Entities--提供语言集成查询(LINQ)支持用于查询在概念模型中定义的实体类型。
Entity SQL -- 与存储无关的SQL方言,直接使用概念模型中的实体并支持诸如继承和关系等 EDM 功能。
查询生成器方法 --可以使用LINQ风格的查询方法构造 Entity SQL 查询。
var类型推断:var p =new Person();
匿名类型。var a =new {p.Name,Age=5,Gender=p.Gender,Name1=a.Name};//{p.Name}=={Name=p.Name}
给新创建对象的属性赋值的简化方法:Person p = new Person{Name="tom",Age=5};等价于Person p = new Person();p.Name="
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。