用EF框架进行增删改查

1、EF是什么?

全称EntityFramework,官方解释是ADO.NET(专门用于访问数据库的组件)中的一套支持面向数据的软件应用程序的技术,是微软的一个ORM(object relation mapping)框架。

Entity Framework是ORMapping的一种具体实现,那ORMapping又是什么呢?ORM–ObjectRelation
Mapping,即对象关系映射框架/数据持久化框架,是根据实体对象操作数据表中数据的一种面向对象的操作框架.

2、EF的框架模式?

1、DataBase First传统的表驱动方式创建EDM,然后通过EDM生成模型和数据层代码。除生成实体模型和自跟踪实现模型,还支持生成轻型DbContext。

2、Model First先创建EDM模型,再生成DDL数据库脚本和模型和数据层代码。除生成实体模型和自跟踪实现模型,支持生成轻型DbContext。

3、Code First手动创建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、进行增删改查实例

4.1、直接新增

var student= new Student()
            {
                  //所要新增的字段如:
                  Name="张三"
            };
            db.Students.Add(student);
            db.SaveChanges();

4.1.2、改变状态新增

var student  = new Student()
            {
                  //所要新增的字段如:
                  Name="张三"
            };
            db.Entry(student).State = System.Data.Entity.EntityState.Added;
            db.SaveChanges();

4.1.3、批量新增

List<ClassInfo> classInfos = new List<ClassInfo>() {
                new ClassInfo(){
                    Name = "2018173801",
                TeacherID = 1,
                Term = 1,
                Remark = "一班"
                },
                 new ClassInfo(){
                   Name = "2018173802",
                   TeacherID = 1,
                   Term = 1,
                   Remark = "二班"
                  }
              };
              db.ClassInfos.AddRange(classInfos);
              db.SaveChanges();

4.2、修改
4.2.1、先查询后修改,这样不会影响其他字段

var classinfo = db.ClassInfos.Find(3);   //查找出ID为3
            classinfo.Remark = "这个班很棒";
            db.SaveChanges();

4.2.2、new对象,将对象的状态,改为修改状态,这样可能将其他属性设置为空

var classinfos = new ClassInfo()
          {
              ID = 4,  
              Name = "2018173803",
              TeacherID = 1,
              Term = 1,
              Remark = "这个班很棒"
          };
          db.Entry(classinfos).State = System.Data.Entity.EntityState.Modified;
          db.SaveChanges();

4.3、删除
4.3.1、删除,先查询后删除,删除ID为6的

var classinfo = db.ClassInfos.Find(6);
            db.ClassInfos.Remove(classinfo);
            db.SaveChanges();

4.3.2、改变状态进行删除

var clasinfo = new ClassInfo()
            {
                ID = 6
            };
            db.Entry(clasinfo).State = System.Data.Entity.EntityState.Deleted;
            db.SaveChanges();

4.3.3、批量删除

 List<ClassInfo> classInfos = db.ClassInfos.Where(p => p.Remark == "四班").ToList();  //查询出Remark为四班集合
    db.ClassInfos.RemoveRange(classInfos);   //Remark为四班批量删除
    db.SaveChanges();
    return View();

4.4、查询

  //精确查询,查询班级号为2018173806
  var classinfos = db.ClassInfos.Where(p => p.Name == "2018173806").ToList();//没有ToList将只会有一个查询语句,不会有结果
  
  //模糊查询,查询班级号有2018
  var classinfos2 = db.ClassInfos.Where(p => p.Name.Contains("2018")).ToList();//Contains为包含的意思
  
  //组合查询 查询学期为1, 同时教师也是1
  var classinfos3 = db.ClassInfos.Where(p => p.Term == 1 && p.TeacherID == 1).ToList();
  
  //组合查询 查询学期为2或者教师也是2
  var classinfos4 = db.ClassInfos.Where(p => p.Term == 2 || p.TeacherID == 2).ToList();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值