面向对象的关系映射ORM框架 之 EntityFramework 详细讲解

12 篇文章 0 订阅

Entity Framework (EF) 是微软提供的一款面向对象的关系映射(ORM)框架,旨在让开发者能够使用面向对象的编程方式操作数据库。它抽象了底层数据库操作,使得开发者可以使用C#等高级编程语言来操作数据库,而无需编写大量的SQL代码。

目录

主要功能

使用步骤

示例项目

1. 安装Entity Framework

2. 创建模型类

3. 创建上下文类

4. 配置连接字符串

5. 执行数据库操作

详细概述

1. 代码优先(Code First)

2. 数据库优先(Database First)

3. 模型优先(Model First)

高级特性

1. 数据迁移

2. 事务处理

3. 性能优化

总结


主要功能

  1. 代码优先(Code First):通过定义类来创建数据库结构。
  2. 数据库优先(Database First):根据已有的数据库生成相应的类和上下文。
  3. 模型优先(Model First):使用设计器创建模型,然后生成数据库和代码。

使用步骤

  1. 安装Entity Framework

    使用NuGet包管理器安装Entity Framework:
    Install-Package EntityFramework
    

  2. 创建模型类

    定义你的实体类,这些类将映射到数据库表中。
  3. 创建上下文类

    上下文类继承自DbContext,并包含所有实体类的DbSet属性。
  4. 配置连接字符串

    在应用程序的配置文件中添加连接字符串。
  5. 执行数据库操作

    使用LINQ或EF提供的API来执行CRUD操作。

示例项目

1. 安装Entity Framework

通过NuGet包管理器控制台安装Entity Framework:

Install-Package EntityFramework
2. 创建模型类

创建一个简单的模型类,比如Student类:

public class Student
{
    public int StudentId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime EnrollmentDate { get; set; }
}
3. 创建上下文类

创建一个上下文类,继承自DbContext

using System.Data.Entity;

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }
}
4. 配置连接字符串

App.configWeb.config文件中添加连接字符串:

<configuration>
  <connectionStrings>
    <add name="SchoolContext" 
         connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=SchoolDB;Integrated Security=True" 
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
5. 执行数据库操作

在程序中使用上下文类来执行数据库操作,例如添加、读取、更新和删除学生记录:

class Program
{
    static void Main(string[] args)
    {
        using (var context = new SchoolContext())
        {
            // 添加新学生
            var student = new Student
            {
                FirstName = "John",
                LastName = "Doe",
                EnrollmentDate = DateTime.Now
            };
            context.Students.Add(student);
            context.SaveChanges();

            // 读取学生数据
            var students = context.Students.ToList();
            foreach (var s in students)
            {
                Console.WriteLine($"{s.FirstName} {s.LastName}");
            }

            // 更新学生数据
            var studentToUpdate = context.Students.FirstOrDefault();
            if (studentToUpdate != null)
            {
                studentToUpdate.FirstName = "Jane";
                context.SaveChanges();
            }

            // 删除学生数据
            var studentToDelete = context.Students.FirstOrDefault();
            if (studentToDelete != null)
            {
                context.Students.Remove(studentToDelete);
                context.SaveChanges();
            }
        }
    }
}

详细概述

1. 代码优先(Code First)

这种方法最适合从头开始编写代码,而不是基于现有数据库。开发者首先编写实体类,然后根据这些类生成数据库。

  1. 定义实体类:在上述示例中,我们定义了Student类。
  2. 配置数据库:通过数据注解或Fluent API配置数据库架构。
  3. 生成数据库:使用DbContext类自动生成数据库。
2. 数据库优先(Database First)

这种方法适用于已有数据库的情况。EF可以基于现有数据库生成实体类和上下文类。

  1. 使用Entity Data Model Wizard:在Visual Studio中使用“添加新项”向导,选择“ADO.NET Entity Data Model”,然后选择“从数据库生成”。
  2. 生成实体类:向导会自动生成与数据库表对应的实体类。
  3. 生成上下文类:向导会生成上下文类,使开发者能够使用这些类与数据库进行交互。
3. 模型优先(Model First)

这种方法介于代码优先和数据库优先之间。开发者可以使用EF设计器创建模型,然后生成数据库和代码。

  1. 创建模型:使用EF设计器创建实体模型。
  2. 生成数据库:从模型生成数据库。
  3. 生成代码:从模型生成实体类和上下文类。

高级特性

1. 数据迁移

EF提供了数据库迁移功能,允许开发者在不丢失数据的情况下对数据库架构进行更改。

启用迁移

Enable-Migrations

添加迁移

Add-Migration InitialCreate

更新数据库

Update-Database

2. 事务处理

EF支持事务处理,确保多条数据库操作在一个事务中执行,以保证数据一致性。

using (var context = new SchoolContext())
{
    using (var transaction = context.Database.BeginTransaction())
    {
        try
        {
            // 执行多个数据库操作
            context.Students.Add(new Student { FirstName = "Alice", LastName = "Smith" });
            context.SaveChanges();

            context.Students.Add(new Student { FirstName = "Bob", LastName = "Johnson" });
            context.SaveChanges();

            // 提交事务
            transaction.Commit();
        }
        catch (Exception)
        {
            // 回滚事务
            transaction.Rollback();
        }
    }
}
3. 性能优化

EF提供了一些性能优化技术,例如延迟加载、显式加载和预加载。

  • 延迟加载:默认情况下,EF会延迟加载导航属性。这意味着在访问导航属性时,EF会自动从数据库加载相关数据。
  • 显式加载:使用Load方法显式加载导航属性。
  • 预加载:使用Include方法在查询时预先加载相关数据。
// 延迟加载
var student = context.Students.Find(1);

// 显式加载
context.Entry(student).Collection(s => s.Enrollments).Load();

// 预加载
var students = context.Students.Include(s => s.Enrollments).ToList();

总结

Entity Framework简化了数据库操作,使开发者可以使用面向对象的方式操作数据库。它提供了代码优先、数据库优先和模型优先三种开发模式,并支持高级特性如数据库迁移、事务处理和性能优化。通过EF,开发者可以更专注于业务逻辑,而不需要处理繁琐的数据库操作。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

战族狼魂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值