前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >.net EF 新手教程

.net EF 新手教程

作者头像
MaybeHC
发布2024-04-23 19:29:02
发布2024-04-23 19:29:02
15600
代码可运行
举报
文章被收录于专栏:技术之路技术之路
运行总次数:0
代码可运行

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

No.1 准备工作

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

No.2 简单查询

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

代码语言:javascript
代码运行次数:0
复制
            //查询
            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管理,并修改属性的对象

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

代码语言:javascript
代码运行次数:0
复制
 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() 代码如下: 修改

代码语言:javascript
代码运行次数:0
复制
            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();

添加

代码语言:javascript
代码运行次数:0
复制
 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();

删除

代码语言:javascript
代码运行次数:0
复制
            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的方式

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

代码语言:javascript
代码运行次数:0
复制
 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();

查询

代码语言:javascript
代码运行次数:0
复制
 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);
                }
            }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • No.1 准备工作
  • No.2 简单查询
  • No.3 实体框架的状态
  • No.4 添加&&修改&&删除
  • No.5 使用SQL的方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档