EF框架的搭建(DataBase First)

一、EF的创建

使用EF进行数据库开发的时候有两个东西建:建数据库(T_Persons),建模型类(Person)。EF的三种创建方法:
1.DataBase First(数据库优先):先创建数据库表,然后自动生成EDM文件,EDM文件生成模型类。简单展示一下DataBase First 的使用。
2.Model First(模型优先):先创建Edm文件,Edm文件自动生成模型类和数据库;
3.Code First(代码优先):程序员自己写模型类,然后自动生成数据库。没有Edm。

三种创建的区别

  1. DataBase First 简单、方便,但是当项目大了之后会非常痛苦;
  2. Code First 入门门槛高,但是适合于大项目。
  3. Model First…… (不需要考虑)
    无论哪种First,一旦创建好了数据库、模型类之后,后面的用法都是一样的。业界都是推荐使用Code First,新版的EF中只支持Code First,因此我们这里只讲Code First。

二、DataBase First

  1. 首先在数据库中创建好数据库、数据表,以及表结构
  2. 在创建C#项目时,添加EF框架,选择“ADO.NET 实体数据模型”
  3. 在实体数据模型向导中选择“来自数据库的EF设计器”
  4. 进行数据库连接中“建立新的连接”
  5. 进行寻找连接目标数据库,创建EF数据实体模型
    在这里插入图片描述

1.App.config:配置文件,里面有连接数据库字符串,EF的相关配置
2.StudentModel.edmx:EDM元数据文件
3.StudentModel.Context.cs:数据库上下文类,可以理解为是映射关系类
4.StudentMode.tt:实体类集合

EDM元数据

EDM设计器模式和XML结构
在这里插入图片描述

在这里插入图片描述

XML结构中明显有三个类型节点,分别对应EDM中的存储模型、概念模型、映射

实体文件

在StudentMode.tt文件里面,可以找到实体文件和选择的数据库表的对应实体表
数据库上下文类

namespace DBFirst
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    
    public partial class StudentManagerEntities : DbContext
    {
        public StudentManagerEntities()
            : base("name=StudentManagerEntities")
        {
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<Admin> Admin { get; set; }
        public virtual DbSet<Course> Course { get; set; }
        public virtual DbSet<Score> Score { get; set; }
        public virtual DbSet<Student> Student { get; set; }
    }
}

StudentModel.Context.cs集成自DbContext
DbContext-实体对象容器
作用:操作数据库的工具,负责管理对象的CRUD(增、删、改、查)操作,以及相应的事务及并发问题
特别注意:某个数据表的字段全部都是外键的时候,不会生成该表对应的实体类

使用EF查询单表数据

在DbSet< T>对象中查询符合条件的实体,一般用基类 IEnumerable<Student> 类型包含的两个方法

IQueryable<Student> Where<Student>(Expression<Func<Student,bool>> predicate)
Student SingleOrDefault<Student>(Expression<Func<Student,bool>> predicate)
private void Form1_Load(object sender, EventArgs e)
        {
            StudentManagerEntities studentEF = new StudentManagerEntities();
            List<Student> list = studentEF.Student.ToList();
        }

使用EF实现CRUD

1. 添加数据

使用DbSet<T> 中的Add方法
然后使用DbContext的SaveChanges()方法

 Student stu = new Student()
                {
                     SName=txtName.Text.Trim(),
 SAge=int.Parse(txtAge.Text.Trim()),SEmail=txtEmail.Text.Trim(),            SSex=radioButton1.Checked?"男":"女"
                };
                studentEF.Student.Add(stu);//只是将实体对象添加到了数据库上下文对应的对象集合中,而并非添加到了数据库中了
                int res = studentEF.SaveChanges();//将数据库上下文中的更改保存到数据库中

2.修改数据

从DbContext中获取实体
修改数据
使用DbContext的SavaChanges()方法

					if (radioButton1.Checked)
                    {
                        currentStu.SSex = "男";
                    }
                    else if (radioButton2.Checked)
                    {
                        currentStu.SSex = "女";
                    }
                    currentStu.SName = txtName.Text.Trim();
                    currentStu.SAge = int.Parse(txtAge.Text.Trim());
                    currentStu.SEmail = txtEmail.Text.Trim();
                    int res = entities.SaveChanges();
                    this.Close(); 

3.使用EF删除

使用DbContext获取实体
使用DbSet< T> 的Remove()方法
使用DbContext的SaveChanges()方法

 Student stu = studentEF.Student.Find(int.Parse(dataGridView1.SelectedRows[0].Cells["Id"].Value.ToString()));
                if (stu!=null)
                {
                    studentEF.Student.Remove(stu);
                    studentEF.SaveChanges();
                    RefreshStudent();
                }

官方文档: https://docs.microsoft.com/zh-cn/ef/core/get-started/?tabs=netcore-cli

猜你喜欢

转载自blog.csdn.net/dust__/article/details/106268419