简单了解实体框架EF(Entity Framework)
1)什么是EF框架
全称EntityFramework 官方点的解释是Entity Framework是ADO.NET 中的一套支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。
什么是ORM?
ORM(Object Relational Mapping) 翻译过来就是对象关系映射。ORM 是将数据存储从域对象自动映射到关系型数据库的工具。ORM主要包括3个部分:域对象、关系数据库对象、映射关系。
2)EF框架的三种模式
DataBase First 数据库优先, 传统的表驱动方式创建EDM,然后通过EDM生成模型和数据层代码。除生成实体模型和自跟踪实现模型,还支持生成轻型DbContext。简历理解就是先设计数据库,创建好数据库映射成对象和上下文。
Model First 模型优先,先创建EDM模型,再生成DDL数据库脚本和模型和数据层代码。除生成实体模型和自跟踪实现模型,支持生成轻型DbContext。简单理解就是设计EDM模型然后生成到数据库和创建对象和上下文。
CodeFirst 代码优先,手动创建POCO模型,数据层DbContext及映射关系,通过Database.SetInitializer生成数据库,这种方式较灵活,但是需要手动定义实体模型和关系映射。简单理解就是自己写好实体对象和映射关系,最后通过命令生成到数据库中去。
3)EF框架的优点与缺点
优点:
1.简洁的Linq to Sql语句大大提高了开发人员的效率,不要再写复杂的sql语句;
2.不再需要再管应用程序如何去连接数据库;
3.EF可以用作用于数据服务和OData Service的基础设施;
缺点:
1.由于Linq语句编译之后就是sql,对于这种自动生成的sql语句无法控制;
2.EF的运行机制会消耗大量内存,大大降低了程序运行效率,从而导致降低了用户在客户端的体验效果;
3.一旦数据结构发生变化,需要更新EF数据model;有时还可能会出现找不到更新过的实体类这种情况;
4)使用EF在MVC中实现增删改查
首先建个数据库,名为(TestDB),在此数据库中添加一张表,名为(ClassInfos),如图所示:
然后再MVC中建一个ClassInfo控制器:
1)新增
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using efZSGC.Models;namespace efZSGC.Controllers
{public class ClassInfoController : Controller{TestDB6Entities db = new TestDB6Entities();// GET: ClassInfopublic ActionResult Index(){//新增var classinfo = new ClassInfo(){Name = "2018173807",Remark = "七班",Term = 1,TeacherID = 2};//第一种方法db.ClassInfos.Add(classinfo);//第二种方法 (二者用其中之一)//db.Entry(classinfo).State = System.Data.Entity.EntityState.Added;db.SaveChanges();return View();}}
}
2)批量新增
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using efZSGC.Models;namespace efZSGC.Controllers
{public class ClassInfoController : Controller{TestDB6Entities db = new TestDB6Entities();// GET: ClassInfopublic ActionResult Index(){//批量新增List<ClassInfo> classInfos = new List<ClassInfo>() {new ClassInfo(){Name = "2018173801",Remark = "一班",Term = 1,TeacherID = 2},new ClassInfo(){Name = "2018173802",Remark = "二班",Term = 1,TeacherID = 2}};db.ClassInfos.AddRange(classInfos);db.SaveChanges();return View();}}
}
3)修改
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using efZSGC.Models;namespace efZSGC.Controllers
{public class ClassInfoController : Controller{TestDB6Entities db = new TestDB6Entities();// GET: ClassInfopublic ActionResult Index(){ //修改方法一:先查询再修改,修改谋个熟悉,不会影响其他属性变化var set = db.ClassInfos.Find(6);set.Remark = "666";db.SaveChanges();//修改方法二:new对象,将对象的状态,改为修改状态,这样可能将其他属性设置为空var classinfoset = new ClassInfo(){ID = 1,Name = "2018173801",Remark = "一班",Term = 1,TeacherID = 2};db.Entry(classinfoset).State = System.Data.Entity.EntityState.Modified;db.SaveChanges();return View();}}
}
4)删除
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using efZSGC.Models;namespace efZSGC.Controllers
{public class ClassInfoController : Controller{TestDB6Entities db = new TestDB6Entities();// GET: ClassInfopublic ActionResult Index(){ //单个删除var classinfo=db.ClassInfos.Find(1);db.ClassInfos.Remove(classinfo); db.SaveChanges(); //批量删除List<ClassInfo> classInfosd = db.ClassInfos.Where(p => p.Term==4).ToList();db.ClassInfos.RemoveRange(classInfosd);db.SaveChanges();return View();}}
}
5)查询
using System.Linq;
using System.Web;
using System.Web.Mvc;
using efZSGC.Models;namespace efZSGC.Controllers
{public class ClassInfoController : Controller{TestDB6Entities db = new TestDB6Entities();// GET: ClassInfopublic ActionResult Index(){ //精准查询。查询班级号为2018173806的 var classinfos1 = db.ClassInfos.Where(p => p.Name == "2018173806").ToList();//模糊查询 查询班级号含有2018的var classinfos2 = db.ClassInfos.Where(p => p.Name.Contains("2018")).ToList();//组合查询 查询学期是2同时教师也是1var classinfo3 = db.ClassInfos.Where(p => p.Term == 2 && p.TeacherID == 1).ToList();//组合查询 查询学期是2或者教师是1的var classinfo4 = db.ClassInfos.Where(p => p.Term == 2 || p.TeacherID == 1).ToList();db.SaveChanges();return View();}}
}
以上就是关于实体框架EF(Entity Framework)的基本介绍与实例
简单了解实体框架EF(Entity Framework)相关推荐
- 实体框架(Entity Framework)简介
实体框架(Entity Framework)简介 实体框架(Entity Framework)简介 简称EF,与ADO.NET关系 ADO.NET Entity Framework 是微软以 ADO. ...
- 实体框架(Entity Framework)--简介
是什么? 微软官方解释:ADO.NETEntity Framework是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早起被称为ObjectSpace,现在版本 ...
- 初学实体框架EF(Entity Framework)
什么是EF? 实体框架EF是微软的一个ORM框架.是支持面向数据的软件开发应用程序. ORM是面向对象的对象模型和关系型数据库的数据结构之间的相互转换.EF是ORM框架的一种,其中O代表实体,M代表的 ...
- C#:实体框架EF(entity framework)
本文来自:http://www.cnblogs.com/xuf22/articles/5513283.html 一.什么是Entity Framework 微软官方提供的ORM工具,ORM让开发人员节 ...
- 灵动思绪EF(Entity FrameWork)
很久之前就想写这篇文章了,但是由于种种原因,没有将自己学习的EF知识整理成一片文章.今天我就用CodeFirst和ModelFirst两种方式的简单案例将自己学习的EF知识做个总结. 在讲解EF之前, ...
- ORM框架 之 Entity Framework
Entity Framework 1.ADO.NET Entity Framework是以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早起被称为ObjectSpac ...
- EF(Entity Framework、EF Core)
学习EF的前提: 熟悉Linq和ADO.Net, 熟悉委托和Lamdba 在使用EF框架进行开发时,我们大多情况使用Linq进行数据查询和操作,而EF底层实现是用ADO.Net进行封装的 EF框架其实 ...
- EF | Entity framework
1 首先在项目中添加一个ADO.NET实体数据模型,选好需要的表后,完成.然后它就会自动给我们应用了如下这些类库,下面是介绍这些类库的作用,及对edmx这个XML文件进行介绍 关于edmx文件的介绍 ...
- MVC实体框架EF实现分页
使用MvcPager控件实现 MvcPager的介绍 MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源 ...
最新文章
- 设计模式 — 行为型模式 — 迭代器模式
- 用设计模式去掉没必要的状态变量 —— 状态模式
- FSAF 让网络自己决定实例输出层
- 普及几个小常识,新手技能补充
- Activity加载View调用顺序
- 我找到一个价值5.5万美元的 Facebook OAuth账户劫持漏洞
- hal库开启中断关中断_STM32 HAL库学习系列第9篇---NVIC按键外部中断函数
- Feign 简介与使用入门,请求、响应压缩,日志记录
- 万字长文干货,广告投放中常说的CPA、CPC、CPD、CPT、CPS、CPM、CPI是什么意思?
- asm source code note 1.7_switch case分支的实现
- 生命在于学习——密码暴力破解
- 旅游出行 APP 哪家强?
- word2007打印在什么地方
- 【JPress】jpress-core架构
- 域格LPM2100 me NB模块PSM相关问题
- 0.进校的第一张Excel表:“住宿分布表” ——《Excel“智能化”之路》 系列文章
- VB和VB.NET的大致区别
- 程序员不爱炫富?不,那是你了解的程序员
- 【GPGPU编程模型与架构原理】第一章 1.3 现代 GPGPU 产品
- 谷歌收购机器人公司 不满足虚拟世界欲踏进现实
热门文章
- java cstring_CString 操作指南
- #KINDLE 电子书制作指南 html转kf8/mobi
- 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)...
- 企业中台最佳实践----阿里等商业巨头组织架构的战略变迁(四)
- 快速了解K4B2G1646F-BYK0
- java栈与堆的区别
- MATLAB灰度图像缩小实验
- order by a desc,b desc与order by a,b desc的区别
- copy和mutableCopy都是浅拷贝!!!
- 单点登录--微服务的登录解决方案