使用 ASP.NET Core 与 Entity Framework Core 进行数据库操作

使用 ASP.NET Core 与 Entity Framework Core 进行数据库操作

Entity Framework Core(EF Core)是ASP.NET Core中的一个轻量级ORM框架,提供了以面向对象的方式与数据库进行交互的能力。本文将通过Visual Studio 2022详细介绍如何使用EF Core进行基本的数据库操作(CRUD),并展示一些进阶技巧,帮助初学者快速掌握该技术。

一、项目创建与配置

1. 创建ASP.NET Core Web API项目

  1. 打开Visual Studio 2022,选择"创建一个新项目"。
  2. 在项目模板中选择"ASP.NET Core Web API",点击"下一步"。
  3. 为项目命名,例如EFCoreDemo,选择保存位置,然后点击"创建"。
  4. 在"附加信息"对话框中,确保目标框架为.NET 6.0或更高版本,然后点击"创建"。

2. 添加Entity Framework Core依赖项

在项目创建完成后,依次执行以下步骤来添加EF Core相关的NuGet包:

  1. 右键点击项目名称,选择"管理NuGet程序包"。
  2. 在"浏览"选项卡中搜索Microsoft.EntityFrameworkCore.SqlServer并点击"安装"。
  3. 继续搜索并安装Microsoft.EntityFrameworkCore.Tools

这些包将帮助我们与SQL Server数据库交互并进行数据库迁移操作。

二、创建数据库上下文和模型

1. 创建模型类

在EF Core中,模型类用于映射数据库表。假设我们需要管理一本简单的图书馆数据库,首先我们创建一个Book类:

  1. 右键项目,在"添加"菜单中选择"新建文件夹",命名为Models
  2. Models文件夹下,右键选择"添加类",命名为Book.cs,并定义如下内容:
csharp 复制代码
namespace EFCoreDemo.Models
{
    public class Book
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public DateTime PublishedDate { get; set; }
        public decimal Price { get; set; }
    }
}

2. 创建数据库上下文类

接下来,我们需要创建一个数据库上下文类LibraryContext,它将管理数据库连接并映射模型类到数据库表:

  1. 在项目根目录中创建一个新的文件夹命名为Data
  2. 右键点击Data文件夹,添加一个类命名为LibraryContext.cs,并定义如下内容:
csharp 复制代码
using EFCoreDemo.Models;
using Microsoft.EntityFrameworkCore;

namespace EFCoreDemo.Data
{
    public class LibraryContext : DbContext
    {
        public LibraryContext(DbContextOptions<LibraryContext> options) : base(options)
        {
        }

        public DbSet<Book> Books { get; set; }
    }
}

3. 配置数据库连接字符串

appsettings.json文件中配置数据库连接字符串,确保你的SQL Server实例可以访问:

json 复制代码
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=LibraryDb;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

然后在Program.cs中配置服务:

csharp 复制代码
using EFCoreDemo.Data;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// 添加数据库上下文到服务容器
builder.Services.AddDbContext<LibraryContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();

app.Run();

三、执行数据库迁移

为了在数据库中创建相应的表结构,我们需要执行数据库迁移操作:

  1. 打开Visual Studio 2022中的"包管理器控制台"(工具 > NuGet 包管理器 > 包管理器控制台)。
  2. 输入以下命令来创建迁移并更新数据库:
powershell 复制代码
Add-Migration InitialCreate
Update-Database

Add-Migration命令会在项目中生成迁移文件,描述从空数据库到当前模型的变化。Update-Database命令则会根据迁移文件的定义在数据库中创建对应的表。

四、实现CRUD操作

1. 创建Controller

为了实现基本的CRUD操作,我们需要创建一个API控制器:

  1. 右键点击Controllers文件夹,选择"添加 > 控制器"。
  2. 选择"API控制器 - 使用Entity Framework",并点击"添加"。
  3. 在对话框中,选择Book模型类和LibraryContext数据上下文类,然后点击"添加"。

Visual Studio会自动生成一个名为BooksController的控制器,其中包含了基本的CRUD操作代码。

2. 实现获取所有书籍的操作

在生成的BooksController中,GetBooks方法如下所示:

csharp 复制代码
[HttpGet]
public async Task<ActionResult<IEnumerable<Book>>> GetBooks()
{
    return await _context.Books.ToListAsync();
}

该方法异步获取所有书籍记录,并返回给客户端。

3. 创建新书籍记录

PostBook方法用于创建新书籍:

csharp 复制代码
[HttpPost]
public async Task<ActionResult<Book>> PostBook(Book book)
{
    _context.Books.Add(book);
    await _context.SaveChangesAsync();

    return CreatedAtAction("GetBook", new { id = book.Id }, book);
}

该方法接收一个Book对象,将其添加到数据库中,并返回创建的记录。

4. 更新书籍记录

PutBook方法用于更新现有书籍:

csharp 复制代码
[HttpPut("{id}")]
public async Task<IActionResult> PutBook(int id, Book book)
{
    if (id != book.Id)
    {
        return BadRequest();
    }

    _context.Entry(book).State = EntityState.Modified;

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!BookExists(id))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return NoContent();
}

该方法根据书籍ID更新对应的数据库记录。

5. 删除书籍记录

DeleteBook方法用于删除指定书籍:

csharp 复制代码
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteBook(int id)
{
    var book = await _context.Books.FindAsync(id);
    if (book == null)
    {
        return NotFound();
    }

    _context.Books.Remove(book);
    await _context.SaveChangesAsync();

    return NoContent();
}

该方法根据ID找到对应的记录并删除。

五、进阶技巧

1. 使用数据迁移管理数据变化

在实际开发中,数据库结构可能会随着需求变化而演进。使用EF Core的迁移功能,可以轻松管理这些变化,而无需手动修改数据库表。

2. 处理并发冲突

在多人访问数据库的情况下,可能会发生并发冲突。EF Core提供了并发冲突检测机制,你可以通过捕获DbUpdateConcurrencyException来处理这些冲突,并决定如何解决。

3. 配置实体关系

EF Core支持多种关系映射,如一对多、多对多等。通过在模型类中定义导航属性并使用Fluent API或数据注解,你可以精确控制数据库表之间的关系。

六、总结

本文详细介绍了如何在ASP.NET Core中使用Entity Framework Core进行数据库操作,从项目的创建到基本的CRUD操作,并展示了一些进阶技巧。通过学习这些内容,初学者可以快速上手并逐步深入掌握EF Core的使用。同时,进阶部分提供了在实际开发中处理复杂数据库操作的一些思路和方法,希望能对你的开发工作有所帮助。

相关推荐
老衲提灯找美女1 分钟前
数据库约束
数据库
卷Java6 分钟前
Python字典:键值对、get()方法、defaultdict,附通讯录实战
开发语言·数据库·python
wanhengidc9 分钟前
跨境云手机适用于哪些场景
大数据·运维·服务器·数据库·科技·智能手机
Bdygsl40 分钟前
MySQL(6)—— 视图
数据库·mysql
oradh41 分钟前
数据库入门概述
数据库·oracle·数据库基础·数据库入门
BullSmall1 小时前
一套定制化高级 payload 合集
数据库·安全性测试
哆啦A梦15881 小时前
统一返回包装类 Result和异常处理
java·前端·后端·springboot
zbdx不知名菜鸡1 小时前
postgre sql 数据库查询优化
数据库·postgresql
9稳1 小时前
基于PLC的生产线自动升降机设计
开发语言·网络·数据库·嵌入式硬件·plc
四七伵2 小时前
Spring Boot项目中varchar字段为什么不用NULL?告别空指针从建表开始
数据库·后端