.net EF 新手教程

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

No.1 准备工作

首先先放上数据库的表结构,便于后面的示例操作。
.net EF 新手教程_第1张图片
下来我们在项目中添加ADO.NET实体数据模型
.net EF 新手教程_第2张图片
模型的内容根据大家的需要进行选择,我在这里选择来自数据库的EF设计器,这样他会帮我自动生成数据库中的EF设计器。
.net EF 新手教程_第3张图片
因为我之前创建过这里会显示我之前的连接, 大家可以在这里选择新建连接
.net EF 新手教程_第4张图片
因为我使用的 SQL Server,所以这里我选择Microsoft SQL Server,继续
.net EF 新手教程_第5张图片
这里根据大家的数据库情况进行选择和配置
.net EF 新手教程_第6张图片
配置成功后在选择数据库的位置可以看到我们的数据库,选择需要的数据库后进行确定,我们的准备工作就完成了。
.net EF 新手教程_第7张图片

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这个枚举
.net EF 新手教程_第8张图片

状态 说明 具备该状态的对象
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();

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

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);
                }
            }

你可能感兴趣的:(C#.NET)