最近学习了.net 的EF框架,在这里自己总结一下用会的几种操作。

No.1 准备工作

首先先放上数据库的表结构,便于后面的示例操作。

下来我们在项目中添加ADO.NET实体数据模型

模型的内容根据大家的需要进行选择,我在这里选择来自数据库的EF设计器,这样他会帮我自动生成数据库中的EF设计器。

因为我之前创建过这里会显示我之前的连接, 大家可以在这里选择新建连接

因为我使用的 SQL Server,所以这里我选择Microsoft SQL Server,继续

这里根据大家的数据库情况进行选择和配置

配置成功后在选择数据库的位置可以看到我们的数据库,选择需要的数据库后进行确定,我们的准备工作就完成了。

No.2 简单查询

我们先做几个简单的查询体会一下EF的机制

            //查询EFDBEntities efdb = new EFDemo.EFDBEntities();Students objStudent = efdb.Students.SingleOrDefault(s => s.StudentName == "冯小强");if (objStudent != null){Console.WriteLine(objStudent.StudentName);}//使用where方法查询符合条件的数据IQueryable<Students> quary = efdb.Students.Where(s => s.StudentId > 100002);foreach (var item in quary){Console.WriteLine(item.StudentName);}

在查询的时候,我们主要使用到LINQ进行查询efdb.Students相当于表里的所有列,每一列生成了一个对象放在Students里,这样就可以进行查询,拿到查询的对象或者列表。

No.3 实体框架的状态

状态在EF框架中比较重要,如果不了解状态也就无法进行后面的操作,下面我来简单说一下几种状态,在框架中使用EntityState这个枚举

状态 说明 具备该状态的对象
Detached 对象存在,但没有被跟踪 新创建的对象
Unchanged 对象尚未经过修改 从DbContext中读取的对象,使用Attach()方法添加的对象 ,执行SaveChanges()后的对象
Added 对象为新对象,并且已添加到对象上下文 使用Add()方法添加的对象
Deleted 对象已从上下文中删除 使用Remove方法溢出的对象
Modified 对象上的一个属性已更改 受DbContext管理,并修改属性的对象

这里我以一次保存为例,追踪一下对象的状态,供大家理解,代码如下。

 Students objStudents = new Students(){StudentAddress = "student",StudentName = "student",Age = 25,Birthday = Convert.ToDateTime("1996-04-15"),ClassId = 2,Gender = "女",PhoneNumber = "022-22222223",StudentIdNo = 120223002199078910,StudentId = 100053};EFDBEntities efdb = new EFDBEntities();Console.WriteLine(efdb.Entry(objStudents).State.ToString());efdb.Students.Add(objStudents);Console.WriteLine(efdb.Entry(objStudents).State.ToString());int result = efdb.SaveChanges();Console.WriteLine(efdb.Entry(objStudents).State.ToString());Console.ReadKey();


通过三个输出语句记录了对象从创建开始,到添加到上下文,到保存的过程,大家先不用关注代码的意思,主要看下状态的变化。

No.4 添加&&修改&&删除

保存修改删除的思路基本一致,这里我做一个简单的说明然后放上代码。
1.创建要添加修改删除的对象信息
2.改变对象状态到相应的删除添加修改状态
3.进行保存efdb.SaveChanges()
代码如下:
修改

Students objStudents = new Students(){StudentAddress = "西安",StudentName = "小娃",Age = 22,Birthday = Convert.ToDateTime("1996-04-15"),ClassId = 2,Gender = "女",PhoneNumber = "022-00000000",StudentIdNo = 120223002199078900,StudentId = 100009};using (EFDBEntities efdb = new EFDBEntities()){efdb.Entry<Students>(objStudents).State = System.Data.EntityState.Modified;Console.WriteLine(efdb.SaveChanges());}Console.ReadKey();

添加

 Students objStudents = new Students(){StudentAddress = "西安",StudentName = "小娃",Age = 25,Birthday = Convert.ToDateTime("1996-04-15"),ClassId = 2,Gender = "女",PhoneNumber = "022-00000000",StudentIdNo = 120223002199078999,};using (EFDBEntities efdb = new EFDBEntities()){efdb.Entry<Students>(objStudents).State = System.Data.EntityState.Added;Console.WriteLine(efdb.SaveChanges());}Console.ReadKey();

删除

Students objStudent = new EFDemo.Students(){StudentId=100019};using(EFDBEntities efdb = new EFDBEntities()){efdb.Set<Students>().Attach(objStudent);efdb.Entry<Students>(objStudent).State = System.Data.EntityState.Deleted;Console.WriteLine(efdb.SaveChanges());}Console.ReadKey();

No.5 使用SQL的方式

因为内容比较简单直接贴上代码
修改

 string sql = "UPDATE Students SET StudentIdNo = 100000002199078999 WHERE StudentId=100022";string sql2 = "UPDATE Students SET StudentIdNo = @StudentIdNo WHERE StudentId=@StudentId";SqlParameter[] param = new SqlParameter[]{new SqlParameter("@StudentIdNo",111111112199078999),new SqlParameter ("@StudentId",100022)};using (EFDBEntities efdb = new EFDBEntities()){//Console.WriteLine(efdb.Database.ExecuteSqlCommand(sql) );Console.WriteLine(efdb.Database.ExecuteSqlCommand(sql2,param));}Console.ReadKey();

查询

 string sql1 = "SELECT count(*) from Students";string sql2 = "SELECT * FROM Students WHERE Gender=@Gender";SqlParameter[] param = new SqlParameter[]{new SqlParameter("@Gender","男")};using(EFDBEntities efdb = new EFDBEntities()){var  stuCount = efdb.Database.SqlQuery<int>(sql1).ToList()[0];var stuList = efdb.Database.SqlQuery<Students>(sql2, param);foreach (var item in stuList){Console.WriteLine(item.StudentName);}}

.net EF 新手教程相关推荐

  1. “易语言.飞扬”新手教程,作者小博哥

    小博哥提供的"易语言.飞扬"新手教程,请大家参考. 小博哥:"详细注释,每一步都解释!真正的新手学习资料,欢迎批评指正!" 请到论坛下载完整内容:http:// ...

  2. Android基础新手教程——1.5.2 Git之使用GitHub搭建远程仓库

    Android基础新手教程--1.5.2 Git之使用GitHub搭建远程仓库 标签(空格分隔): Android基础新手教程 本节引言: 在上一节中.我们学习了怎样使用Git.构建我们的本地仓库.轻 ...

  3. 【OpenCV十六新手教程】OpenCV角检测Harris角点检测

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) ...

  4. python完全新手教程-Python完全新手教程

    Python完全新手教程 更新时间:2007年02月08日 00:00:00 作者: Python入门教程FROM:http://www.cnblogs.com/taowen/articles/112 ...

  5. python详细安装教程linux-Linux系统如何安装Python?新手教程

    新手入门Python的第一步就是要在你的计算机上安装好Python.有些人可能要问了,Linux系统如何安装Python?本文为你准备了一份新手安装Python的教程,几乎是手把手教你如何操作,你只要 ...

  6. 从小白到精通python要多久-超适合小白的python新手教程

    python介绍 这是我们专门为 小白 量身打造的Python新手教程,具有如下特点: 全视频,手把手,零起点,项目实例,基于船新的Python 版本. Python是一种计算机程序设计语言.你可能已 ...

  7. hibernate官方新手教程 (转载)

    hibernate官方新手教程第一部分 - 第一个Hibernate程序 首先我们将创建一个简单的控制台(console-based)Hibernate程序.我们使用内置数据库(in-memory d ...

  8. ROS探索总结(一)(二)(三):ROS总体框架 ROS总体框架 ROS新手教程

    ROS探索总结(一)--ROS简介 一.历史 随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求.2010年Willow Garage公 ...

  9. 明日之后怎么跳过实名认证_明日之后新手教程能不能跳过 明日之后新手教程玩法介绍...

    明日之后新手教程能不能跳过,明日之后游戏萌新注册账号后都会经历一段新手教程玩法才能正式体验游戏,不少小伙伴都最少花费30-50分钟才能完成,许多玩家都很好奇新手教程玩法能不能跳过,下面小编给大家带来明 ...

  10. 超凡先锋怎么进入维护服务器,超凡先锋新手教程怎么过 新手教程攻略_超凡先锋...

    超凡先锋新手教程怎么过?作为一款生存射击类游戏,前期的新手教程真的非常重要,它会给玩家介绍游戏内的所有玩法,可以让各位玩家更快的熟悉游戏,那么这个新手教程要如何过?今天小编就来给大家做个具体的介绍,一 ...

最新文章

  1. 机器学习-Logistic回归原理及实战
  2. 三种获取Class类型的实例的方法
  3. Oracle JDBC中的PreparedStatement占位符过多
  4. linux下C++遍历文件夹下的全部文件;Windows/Linux下C++批量修改文件名,批量删除文件...
  5. java jpopupmenu 无法显示_JAVA :为什么使用Jpopupmenu()有参构造方法 不显示标题
  6. leetcode 1202 python
  7. java transient 应用场景_关于java:transient关键字的用途是什么以及何时使用它?...
  8. lua luarocks luacheck linux安装
  9. 通过网络数据采集系统快速获得优质销售线索
  10. c# 多线程 源码5
  11. 关于MySQL中出现相对应引用词报错“ambiguous”的问题
  12. python精确有理数实验_有理数类实验报告
  13. Papervision 3D的简介
  14. 什么是VTP?(简单介绍)
  15. 告别Excel!别人家高大上的财务数据分析,这才是老板的最爱
  16. 【老鸟进阶】deepfacelab如何让融合更自然(二)清晰度篇
  17. Origin pro更改语言灰色时的解决办法
  18. DUX主题顶部彩条美化
  19. 丹佛斯变频器al13故障_丹佛斯变频器FC302显示A33故障代码维修案例
  20. 创建临时文件 临时目录

热门文章

  1. vscode连接安卓模拟器上autojs
  2. 华为云服务器系统备份,云服务器备份系统
  3. foxmail 163企业邮箱配置
  4. 字符全角半角转换及特殊符号转换
  5. 基于C++的psf2otf实现
  6. h5php大转盘抽奖,jQuery带次数带弹窗的大转盘抽奖代码(支持h5)
  7. edge怎么开启沉浸式阅读_《幻塔》首测今日开启 探索沉浸式开放世界_网络游戏新闻...
  8. 立创EDA——PCB的布局(四)
  9. python语言程序代码保存在_《计算机二级Python语言程序设计考试》第5章:函数和代码复用...
  10. NLP之TF之LSTM:基于Tensorflow框架采用PTB数据集建立LSTM网络的自然语言建模