ORM(一):EF的简介、简单建立与运用

Entity Framework实体框架(EF)是ADO.NET的开源对象关系映射(ORM)框架,它是.NET Framework的一部分,是一组支持开发面向数据的软件应用程序的技术。微软为实现.NET跨平台,将EF从.NET分离,使EF更加组件化。2016年6月27日,Entity Framework 7作为实体框架核心1.0发布,与ASP.Net Core 1.0和.Net Core 1.0一起发布,重命名为凸显出它是完全重新而不是增量升级,同时,EF7并不会取代EF6。

在EF中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。
概念架构定义语言文件(.csdl)——定义概念模型
存储架构定义语言文件(.ssdl)——定义存储模型
映射规范语言文件(.msl)——定义存储模型与概念模型之间的映射M。

实体框架 使用这些基于XML的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新、和删除操作转换为数据源中的等效操作。EDM甚至支持将概念模型中的实体映射到数据源中的存储过程。

 

ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。

广义上来说,ORM可以被认为是 面向对象模型和关系型数据库的数据结构之间的相互转换。

狭义上来说,ORM可以被认为是,基于关系型数据库的数据存储,实现了一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面对对象的接口,持续化一个OO对象应该不需要了解任何关系型数据库存储数据的实现细节。

 

其他.NET ORM框架:

    1. PetaPoco : 
      与完备的ORM框架不同,PetaPoco更加注重易用性和性能。使用PataPoco只需要引入一个C#文件,可以使用强类型的POCO(Plain Old CLR Object),并支持 T4 模板生成的类等。此外,由于PetaPoco是开源项目,因此添加条件来处理如空间数据等特定情况会很容易。
    2. Dapper : 
      性能方面高于PetaPoco,速度只稍逊于手工编码的数据访问层(DAL、Data AccessLayer),还有一些对初学者会有帮助的、位于官网上的系列博文和一些独立博文教程。

 

VS配置EF环境

1.使用EF,创建Model (DataFirst)

  1. 在解决方案中,创建所使用的项目。例如:ASP网站项目、WinForm窗体项目……
  2. 在新建的项目中,添加 > 新建项 > 数据 > ADO.NET实体数据模型(.edmx)
  3. 在新建的.edmx中选择:从数据库生成(DatabaseFirst)
  4. 选择新建连接,填写连接数据库 > 填写登录数据库信息 > 选择或输入需要生成模型的数据库名称.
  5. 选择需要创建模型的表、视图、存储过程
  6. 点击下一步,直接生成(有些电脑可能会出现警告信息,忽视即可)。

 

流程.png

2.使用EF创建的内容

0.创建完成后,项目会默认引入两个命名空间:EntityFramework、System.Data.Entity

1. 最外层为.edmx文件,EF模型设计器,展示从数据库创建的模型,包括:表名、属性(表字段)、导航属性(外键、表与表之间的对应关系)、表与表之间1对1、1对多的关系。

2. Model1.Context.tt、Model.Designer.cs、Model.edmx.diagram、Model1.tt

1). Model1.Context.tt:包含Model1.Context.cs

 Model1.Context.tt由T4模板生成,不可更改,Model1.Context.cs继承自DbContext,包括构造方法(继承自父类的构造方法,并在此传递配置文件的数据库连接字符串)、各个表所对应的Dbset<T>类型的自动属性。

2). Model.Designer.cs:自动生成,无需更改

3) . Model.edmx.diagram:描述edmx文件的元素信息(名称、位置……)

4). Model1.tt:包含生成的Model.cs,自身由T4模板生成,无需修改

 

3.使用EF进行增删改查

查询

1 StudentMISEntities stu = new StudentMISEntities();
2 //IQueryable<Users> userInfoList=from u in stu.Users
3 var userInfoList = from u in stu.Users
4                    where u.id == 10
5                    select u;
6 foreach (var item in userInfoList)//EF延迟加载机制,数据用到的时候才去数据库中查询,不用的时候不去查询,提高程序性能
7 {
8       Response.Write(item.uName);
9 }

 

增加

1 Users userInfo = new Users();
2  userInfo.uName = "2333";
3  userInfo.uPassword = "123";
4  userInfo.uRole = "学生";
5 
6  StudentMISEntities stu = new StudentMISEntities();//创建EF数据操作类实例
7  stu.Users.Add(userInfo);//把数据添加到EF,并添加标记
8  stu.SaveChanges();//把数据保存到数据库

 

修改

StudentMISEntities stu = new StudentMISEntities();
var userInfoList = from u in stu.Users
                   where u.id == 16
                   select u;
Users userInfo = userInfoList.FirstOrDefault();//返回第一个元素,如果没有的话,返回null
if (userInfo!=null)
{
   userInfo.uPassword = "12345678";
   stu.Entry<Users>(userInfo).State = System.Data.Entity.EntityState.Modified;//添加修改标记
   stu.SaveChanges();
   Response.Write(userInfo.uPassword);
}
else
{
   Response.Write("要修改的数据不存在");
}

 

删除

 1  StudentMISEntities stu = new StudentMISEntities();
 2  var userInfoList = from u in stu.Users
 3                     where u.id == 17
 4                     select u;
 5 Users userInfo = userInfoList.FirstOrDefault();//返回第一个元素,如果没有的话,返回null
 6 if (userInfo!=null)
 7 {
 8    //stu.Users.Remove(userInfo);
 9    stu.Entry<Users>(userInfo).State = System.Data.Entity.EntityState.Deleted;//添加删除标记
10    stu.SaveChanges();
11    Response.Write("已删除");
12 }
13 else
14 {
15    Response.Write("要删除的数据不存在");
16 }

 

转载于:https://www.cnblogs.com/ruisenlLi/p/9263276.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值