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: ClassInfo
public 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: ClassInfo
public 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: ClassInfo
public 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: ClassInfo
public 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: ClassInfo
public 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同时教师也是1
var 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)的基本介绍与实例