.net EF 新手教程

最近学习了.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);
                }
            }
  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Maybe_ch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值