EF学习笔记-1 EF增删改查
首次接触Entity FrameWork,就感觉非常棒。它节省了我们以前写SQL语句的过程,同时也让我们更加的理解面向对象的编程思想。最近学习了EF的增删改查的过程,下面给大家分享使用EF对增删改查时如何处理的。
第一步:创建自定义的DbContext来连接自己的数据库。
public class DataBaseContext : DbContext
{
public DataBaseContext() : base("name=SQLCONN")
{
}
public DbSet<Model.Entities.StudentEntity> StudentEntities { get; set; }
}
1、新增操作
我们会根据前台传过来的实体信息对数据库的表进行新增操作。对于以前使用SQL语句的方式,我们会写很长的SQL语句来实现。而对于EF来说,只需要几句简单的代码就可以搞定。
public void Insert(StudentEntity studentEntity)
{
if(studentEntity == null)
throw new ArgumentNullException(nameof(studentEntity));
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
dataBaseContext.Set<StudentEntity>().Add(studentEntity);
dataBaseContext.SaveChanges();
}
}
2、删除操作
对于删除来说,通常我们使用软删除来操作。毕竟数据库中数据尽量不要真的删除了。那么数据表中经常会设置一个IsDeleted字段。那么我们只需要给IsDeleted字段赋值,重新再SaveChanges就可以了。
public void Delete(int id)
{
if(id == 0)
throw new ArgumentNullException(nameof(id));
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
StudentEntity studentEntity = dataBaseContext.Set<StudentEntity>().FirstOrDefault(t => t.Id == id);
if (studentEntity != null) studentEntity.Isdeleted = true;
dataBaseContext.SaveChanges();
}
}
3、修改操作
通过刚才删除操作的例子,我们可以知道删除其实也就是修改方式的一种。我们只是对其中的一个字段进行修改,然后在进行SaveChanges操作。那么对于修改操作,也是一样的思想。不同的是修改操作会根据前台传过来的实体信息来给需要修改的字段赋值或者实际场景的业务来进行修改。
public void Update(StudentEntity studentEntity)
{
if (studentEntity == null)
throw new ArgumentNullException(nameof(studentEntity));
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
StudentEntity student = dataBaseContext.Set<StudentEntity>().FirstOrDefault(t => t.Id == studentEntity.Id);
if (student != null)
{
student.StuName = studentEntity.StuName;
student.StuNo = studentEntity.StuNo;
student.StuSex = studentEntity.StuSex;
student.Grade = studentEntity.Grade;
}
dataBaseContext.SaveChanges();
}
}
我们可以看到,不论是修改还是删除,我们都会先从数据库中查询出对应的信息,然后再做对应的修改赋值操作,最后调用SaveChanges方法。
备注:所有增删改过程都需要调用SaveChanges方法,这样才能更新到数据库中。
4、查询操作
对于查询来说,一般会有查询所有实体信息和根据主键查询单个实体信息。
查询所有实体
public List<StudentEntity> GetList()
{
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
List<StudentEntity> studentEntities = dataBaseContext.Set<StudentEntity>().ToList();
return studentEntities;
}
}
主键查询单个实体
public StudentEntity GetEntity(int id)
{
if (id == 0)
throw new ArgumentNullException(nameof(id));
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
StudentEntity studentEntity = dataBaseContext.Set<StudentEntity>().FirstOrDefault(t => t.Id == id);
return studentEntity;
}
}
完整案例
public class StudentService
{
public List<StudentEntity> GetList(string stuName, string stuNo)
{
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
List<StudentEntity> studentEntities;
if (!string.IsNullOrEmpty(stuName))
{
studentEntities = dataBaseContext.Set<StudentEntity>().Where(t => t.StuName == stuName).ToList();
}
else if (!string.IsNullOrEmpty(stuNo))
{
studentEntities = dataBaseContext.Set<StudentEntity>().Where(t => t.StuNo == stuNo).ToList();
}
else
{
studentEntities = dataBaseContext.Set<StudentEntity>().ToList();
}
return studentEntities;
}
}
public void Insert(StudentEntity studentEntity)
{
if(studentEntity == null)
throw new ArgumentNullException(nameof(studentEntity));
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
dataBaseContext.Set<StudentEntity>().Add(studentEntity);
dataBaseContext.SaveChanges();
}
}
public void Update(StudentEntity studentEntity)
{
if (studentEntity == null)
throw new ArgumentNullException(nameof(studentEntity));
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
StudentEntity student = dataBaseContext.Set<StudentEntity>().FirstOrDefault(t => t.Id == studentEntity.Id);
if (student != null)
{
student.StuName = studentEntity.StuName;
student.StuNo = studentEntity.StuNo;
student.StuSex = studentEntity.StuSex;
student.Grade = studentEntity.Grade;
}
dataBaseContext.SaveChanges();
}
}
public void Delete(int id)
{
if(id == 0)
throw new ArgumentNullException(nameof(id));
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
StudentEntity studentEntity = dataBaseContext.Set<StudentEntity>().FirstOrDefault(t => t.Id == id);
if (studentEntity != null) studentEntity.Isdeleted = true;
dataBaseContext.SaveChanges();
}
}
public StudentEntity GetEntity(int id)
{
if (id == 0)
throw new ArgumentNullException(nameof(id));
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
StudentEntity studentEntity = dataBaseContext.Set<StudentEntity>().FirstOrDefault(t => t.Id == id);
return studentEntity;
}
}
public List<StudentEntity> GetList()
{
using (DataBaseContext dataBaseContext = new DataBaseContext())
{
List<StudentEntity> studentEntities = dataBaseContext.Set<StudentEntity>().ToList();
return studentEntities;
}
}
}
有不对的地方请各位批评指正,互相学习!
EF学习笔记-1 EF增删改查的更多相关文章
- 【JAVAWEB学习笔记】20_增删改查
今天主要是利用三层架构操作数据库进行增删查改操作. 主要是编写代码为主. 附图: 前台和后台 商品的展示 修改商品
- HTML5+ 学习笔记3 storage.增删改查
//插入N条数据 function setItemFun( id ) { //循环插入100调数据 var dataNum = new Number(id); for ( var i=0; i< ...
- Python学习笔记-列表的增删改查
- [学习笔记] Oracle基础增删改查用法
查询 select *|列名|表达式 from 表名 where 条件 order by 列名 select t.* from STUDENT.STUINFO t where t.stuname = ...
- python学习之-成员信息增删改查
python学习之-成员信息增删改查 主要实现了成员信息的增加,修改,查询,和删除功能,写着玩玩,在写的过程中,遇到的问题,旧新成员信息数据的合并,手机号和邮箱的验证,#!/usr/bin/env p ...
- EF学习笔记-2 EF之支持复杂类型的实现
使用过.NET的小伙伴们知道,在我们的实体模型中,除了一些简单模型外,还有一些复杂类型,如几个简单的类型组合而成的类型:而EF除了在实现基本的增删改查之外,也支持复杂类型的实现. 那么如何手动构造复杂 ...
- hibernate系列笔记(1)---Hibernate增删改查
Hibernate增删改查 1.首先我们要知道什么是Hibernate Hibernate是一个轻量级的ORMapping对象.主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获 ...
- JDBC基础学习(一)—JDBC的增删改查
一.数据的持久化 持久化(persistence): 把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,数据持久化意味着将内存中的数据保存到硬盘上加以固化,而持久化的实现过程大多通过各 ...
- mybatis学习(五)——增删改查及自增主键的获取
一.mybatis的增删改查 1.修改hotelMapper接口 package com.pjf.mybatis.dao; import com.pjf.mybatis.po.Hotel; publi ...
随机推荐
- 二叉树查找树中序后继 · Inorder Successor in Binary Search Tree
[抄题]: 给一个二叉查找树以及一个节点,求该节点的中序遍历后继,如果没有返回null [思维问题]: 不知道分合算法和后序节点有什么关系:直接return表达式就行了,它自己会终止的. [一句话思路 ...
- MySQL5.7.10配置和使用
前两天搞mybatis和springmvc的结合,搞了半天项目就是跑不起来,由于都没有接触过,也不知道原因出在哪里.今天想彻底学习下mybatis,于是就想使用MySQL.从官网上下了,MySQL-5 ...
- Spring框架的事务管理之声明式事务管理的类型
1. 声明式事务管理又分成两种方式 * 基于AspectJ的XML方式(重点掌握)(具体内容见“https://www.cnblogs.com/wyhluckdog/p/10137712.html”) ...
- ThinkPHP5路由图解
- PAT 1078 字符串压缩与解压(20)(代码+思路)
1078 字符串压缩与解压(20 分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来表 ...
- css长度
在CSS样式表中,长度单位分两种: 相对长度单位,如px, em等绝对长度单位,如pt,mm等 CSS相对长度单位(relative length unit) CSS相对长度单位中的相对二字,表明了其 ...
- 选择排序(直接排序)java语言实现
class demo { public static void main(String[] args) { int[] arr={1,4,2,6,8,9,0,5,3,2,2,4,4,6,7,8}; f ...
- 2018.06.30 BZOJ4443: [Scoi2015]小凸玩矩阵(二分加二分图匹配)
4443: [Scoi2015]小凸玩矩阵 Time Limit: 10 Sec Memory Limit: 128 MB Description 小凸和小方是好朋友,小方给小凸一个N*M(N< ...
- hdu-1055(贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1055 题意:给一棵树涂色,这棵树的每个节点都有自己的价值Ci,涂色的原则是只由这个节点的父节点涂色之后 ...
- VHDL的库
STD_LOGIC_ARITH 扩展了UNSIGNED.SIGNED.SMALL_INT(短整型)三个数据类型,并定义了相关的算术运算和转换函数. --======================== ...