使用EF框架

EF优缺点:

它是微软封装好一种ADO.NET数据实体模型,将数据库结构以ORM模式映射到应用程序中。

优点:

1.简洁的Linq to Sql语句大大提高了开发人员的效率,不要再写复杂的sql语句;

2.不再需要再管应用程序如何去连接数据库;

3.EF可以用作用于数据服务和OData Service的基础设施;

缺点:

1.由于linq语句编译之后就是sql,对于这种自动生成的sql语句无法控制;

2.EF的运行机制会消耗大量内存,大大降低了程序运行效率,从而导致降低了用户在客户端的体验效果;

3.一旦数据结构发生变化,需要更新EF数据model;有时还可能会出现找不到更新过的实体类这种情况;

 

创建

新建项目,选择已安装——其他项目类型——Visual Studio解决方案,需要注意的是.NET Framework要选择版本为4.0的版本

右键点击我们创建的项目,选择添加——新建项目

已安装——web——空web应用程序,注意的是.NET Framework要与前面的版本选择一致,名称自拟,然后点击确定

右键点击我们刚刚创建的项目,选择添加——新建项

弹出添加新项,选择Visual C#中的数据,选择ADO.NET实体数据模型,名称自己定义,然后点击添加

弹出实体数据模型向导,模型分为“来自数据库的EF设计器”、“空EF设计器模型”、“空Code First模型”和“来自数据库的Code First”,在这里选择的是“来自数据库的EF设计器”,点击下一步

弹出实体数据模型向导,点击新建连接

例子

  查询

        public static void SearchStudent()
        {
          
            using (MySchoolEntities entities = new MySchoolEntities())
            {
                //按名称查询年级编号
                Grade grade = entities.Grades.SingleOrDefault(g => g.GradeName == "S2");//SingleOrDefault返回序列中的唯一记录;如果该序列为空,则返回默认值;如果该序列包含多个元素,则引发异常。
                if (grade != null)
                {
                    Console.WriteLine("S2年级的编号为{0}",grade.GradeId);//输出年级名为S2的年级ID
                }

                //用where()方法查询符合条件的数据
                IQueryable<Student> query = entities.Students.Where(s => s.Gender == "男" && s.GradeId == grade.GradeId);
                List<Student> stus = query.ToList();//执行查询

                Console.WriteLine("学号\t姓名");
                foreach (var stu in stus)
                {
                    Console.WriteLine("{0}\t{1}",stu.StudentNo,stu.StudentName);
                }
            }
        }

  添加

   public static void AddStudent()
        {

            //添加学生数据
            using (MySchoolEntities entities = new MySchoolEntities())
            {
                entities.Students.Add(
                    new Student()
                    {
                        LoginPwd = "123",
                        StudentName = "百福美",
                        Gender = "男",
                        GradeId = 2,
                        Birthday = Convert.ToDateTime("1992-4-2")

                    });

                if (entities.SaveChanges() > 0)
                {
                    Console.WriteLine("添加数据成功!");
                }
            }
        }

  删除

   public static void RemoveStudent()
        {
            //删除学生数据
            using (MySchoolEntities entities = new MySchoolEntities())
            {
                Student stu = entities.Students.FirstOrDefault(s => s.StudentName == "百福美");//返回序列中的第一条记录,如果没有记录,则返回默认值。
                if (stu != null)
                {
                    entities.Students.Remove(stu);//从集合中删除学生对象
                }
                if (entities.SaveChanges() > 0)
                {
                    Console.WriteLine("删除数据成功!");
                }
            }
        }

  修改

   public static void ModifyStudent()
        {

            //修改学生数据
            using (MySchoolEntities entities = new MySchoolEntities())
            {
                Student stu = entities.Students.FirstOrDefault(s => s.StudentName == "百福美");
                if (stu != null)
                {
                    stu.LoginPwd = "123456";
                }
                if (entities.SaveChanges() > 0)
                {
                    Console.WriteLine("修改数据成功!");
                }
            }
        }

Grade.cs

public partial class Grade//在另一个 .cs 文件中也可以定义相同的类
    {
        public Grade()
        {
            this.Students = new HashSet<Student>();
            this.Subjects = new HashSet<Subject>();
        }
    
        public int GradeId { get; set; }
        public string GradeName { get; set; }
    
        public virtual ICollection<Student> Students { get; set; }
        public virtual ICollection<Subject> Subjects { get; set; }
    }

Student.cs

public partial class Student
    {
        public Student()
        {
            this.Result = new HashSet<Result>();
        }
    
        public int StudentNo { get; set; }
        public string LoginPwd { get; set; }
        public string StudentName { get; set; }
        public string Gender { get; set; }
        public int GradeId { get; set; }
        public string Phone { get; set; }
        public string Address { get; set; }
        public System.DateTime Birthday { get; set; }
        public string Email { get; set; }
    
        public virtual Grade Grade { get; set; }//如果不用virtual重写的话,系统默认会为你加new关键字,他的作用是覆盖,而virtual的关键作用在于实现多态
        public virtual ICollection<Result> Result { get; set; }
    } 

Result.cs

public partial class Result
    {
        public int StudentNo { get; set; }
        public int SubjectId { get; set; }
        public int StudentResult { get; set; }
        public System.DateTime ExamDate { get; set; }
    
        public virtual Student Student { get; set; }
        public virtual Subject Subject { get; set; }
    }

 

posted @ 2020-10-06 18:58  小九家的丫头  阅读(375)  评论(0编辑  收藏  举报