全称EntityFramework,官方解释是ADO.NET(专门用于访问数据库的组件)中的一套支持面向数据的软件应用程序的技术,是微软的一个ORM(object relation mapping)框架。
优点:
1.简洁的Linq to Sql语句大大提高了开发人员的效率,不要再写复杂的sql语句;
2.不再需要再管应用程序如何去连接数据库;
3.EF可以用作用于数据服务和OData Service的基础设施;
缺点:
1.由于linq语句编译之后就是sql,对于这种自动生成的sql语句无法控制;
2.EF的运行机制会消耗大量内存,大大降低了程序运行效率,从而导致降低了用户在客户端的体验效果;
3.一旦数据结构发生变化,需要更新EF数据model;有时还可能会出现找不到更新过的实体类这种情况;
创建一个班级表 (ClassInfos),数据如下,通过EF框架创建一个实体类 TextDBEntities
控制器代码如下:
//新增
public ActionResult Add()
{
var classinfo = new ClassInfo()
{
Name = "2018173807",
Remark = "7班",
TeacherID = 1,
Term = 2
};
//两种新增方式:
db.ClassInfos.Add(classinfo);
db.Entry(classinfo).State = System.Data.Entity.EntityState.Added;
//批量新增
List<ClassInfo> classInfos = new List<ClassInfo>()
{
new ClassInfo(){
Name="2018173801",
Remark="1班",
TeacherID=1,
Term=2 },
new ClassInfo() {
Name="2018173802",
Remark="2班",
TeacherID=1,
Term=2 }
};
db.ClassInfos.AddRange(classInfos);
db.SaveChanges();
return View();
}
控制器代码如下:
public ActionResult Edit()
{
//修改的2种方式
//1,先查询再修改,修改某个属性,不会影响其他属性的变化
//2,new对象,将对象的状态,改为修改状态,这样,可能将其他属性设置为空
var classinfo = db.ClassInfos.Find(1003);
classinfo.Name = "2018173804";
classinfo.Remark = "四班";
db.SaveChanges();
var classInfo = new ClassInfo()
{
ID = 1005,
Name = "2018173803",
Remark = "3班",
TeacherID = 1,
Term = 2
};
db.Entry(classInfo).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
return View();
}
通过上述两种修改方式,我们更改了主键 为1003和1005的班级信息,实现结果如下图:
控制器代码如下:
public ActionResult Delete()
{
//批量删除,删除备注为 四班的所有班级信息
List<ClassInfo> classIDSS = db.ClassInfos.Where(p => p.Remark == "四班").ToList();
db.ClassInfos.RemoveRange(classIDSS);
//删除的2种方式
//1,先查询到ID主键再删除
//2,new对象,通过new对象找到ID主键,将对象的状态改为删除状态
var classinfo = db.ClassInfos.Find(1005);
db.ClassInfos.Remove(classinfo);
var classInfo = new ClassInfo()
{
ID = 1004
};
db.Entry(classInfo).State = System.Data.Entity.EntityState.Deleted;
db.SaveChanges();
return View();
}
控制器代码如下:
public ActionResult Index()
{
//精准查询,查询班级为2018173806的班级信息
var classinfos2 = db.ClassInfos.Where(p => p.Name == "2018173806").ToList();
//模糊查询,查询班级名含2018的班级信息
var classinfos3 = db.ClassInfos.Where(p => p.Name.Contains("2018")).ToList();
//组合查询,查询学期为1,并且教师为1的班级信息
var classinfos4 = db.ClassInfos.Where(p => p.Term == 1 && p.TeacherID == 1).ToList();
//组合查询,查询学期为2或者教师为1的班级信息
var classinfos5 = db.ClassInfos.Where(p => p.Term == 2 || p.TeacherID == 1).ToList();
return View();
}