zoukankan      html  css  js  c++  java
  • 使用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("学号 姓名");
                    foreach (var stu in stus)
                    {
                        Console.WriteLine("{0} {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; }
        }

  • 相关阅读:
    mac前端解除端口占用命令
    Mac安装Brew
    Mac Webstrom 快捷键
    linux yarn安装
    js-新兴的API,最佳实践,离线应用于客户端存储
    js-高级技术
    js-Ajax与Comet
    js-错误处理与调试,JSON
    js-DOM2,表单脚本
    js-事件
  • 原文地址:https://www.cnblogs.com/bignine/p/13774229.html
Copyright © 2011-2022 走看看