简单了解实体框架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: 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)的基本介绍与实例

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值