1.什么是EF框架?
全称EntityFramework 官方点的解释是Entity Framework是ADO.NET
中的一套支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。
2.EF框架的三种模式
DataBase First 数据库优先,
传统的表驱动方式创建EDM,然后通过EDM生成模型和数据层代码。除生成实体模型和自跟踪实现模型,还支持生成轻型DbContext。简历理解就是先设计数据库,创建好数据库映射成对象和上下文。Model First
模型优先,先创建EDM模型,再生成DDL数据库脚本和模型和数据层代码。除生成实体模型和自跟踪实现模型,支持生成轻型DbContext。简单理解就是设计EDM模型然后生成到数据库和创建对象和上下文。CodeFirst 代码优先,手动创建POCO模型,DbContext。简单理解就是设计EDM模型然后生成
CodeFirst 代码优先,手动创建POCO模型,数据层DbContext及映射关系,通过Database.SetInitializer生成数据库,这种方式较灵活,但是需要手动定义实体模型和关系映射。简单理解就是自己写好实体对象和映射关系,最后通过命令生成到数据库中去。
3.代码实例
public class ClassInfoController : Controller
{
TestDB6Entities db = new TestDB6Entities();
// GET: ClassInfo
public ActionResult Index()
{
var classinfo = new ClassInfo()
{
Name = "2018173807",
Remark = "七班",
Term = 1,
TeacherID = 2
};
方法1: db.ClassInfos.Add(classinfo);
方法2: db.Entry(classinfo).State = System.Data.Entity.EntityState.Added;
db.SaveChanges();
//批量新增
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();
}
}
修改
public class ClassInfoController : Controller
{
TestDB6Entities db = new TestDB6Entities();
// GET: ClassInfo
public ActionResult Index()
{
//修改1:先查询再修改,修改谋个熟悉,不会影响其他属性变化
var set = db.ClassInfos.Find(7);
set.Remark = "666";
db.SaveChanges();
//修改2:new对象,将对象的状态,改为修改状态,这样可能将其他属性设置为空
var classinfoset = new ClassInfo()
{
ID = 1,
Name = "2018173801",
Remark = "一班",
Term = 1,
TeacherID = 2
};
db.Students.Add(student);
db.Entry(classinfoset).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
return View();
}
}
删除
public class ClassInfoController : Controller
{
TestDB6Entities db = new TestDB6Entities();
// GET: ClassInfo
public ActionResult Index()
{
方法1.
var a=db.ClassInfo.Find(ID);
db.ClassInfo.Remove(a);
db.savechanges();
方法2.
var b=new ClassInfo()
{
id=需要删除的ID
}
db.Entry(b).State = System.Data.Entity.EntityState.Deleted;
db.savechanges();
方法3.批量删除
List<ClassInfo> classInfosd = db.ClassInfos.Where(p => p.Remark == "七班").ToList();
db.ClassInfos.RemoveRange(classInfosd);
db.SaveChanges();
return View();
}
}
查询 public class ClassInfoController : Controller
{
TestDB6Entities db = new TestDB6Entities();
// GET: ClassInfo
public ActionResult Index()
{
//精准查询。查询班级号为2018173806的
var classinfos = db.ClassInfos.Where(p => p.Name == "2018173806");
var classinfos1 = db.ClassInfos.Where(p => p.Name == "2018173806").ToList();
//模糊查询 查询班级号含有2018的
var classinfos2 = db.ClassInfos.Where(p => p.Name.Contains("2018")).ToList();
//组合查询 查询学期是1同时教师也是1
var classinfo3 = db.ClassInfos.Where(p => p.Term == 1 && p.TeacherID == 1).ToList();
//组合查询 查询学期是1包含教师是1的
var classinfo4 = db.ClassInfos.Where(p => p.Term == 1 || p.TeacherID == 1).ToList();
db.SaveChanges();
return View();
}
}