Entity Framework Core增删改查

EntityFramework-Core(EF Core),是数据库操作的首选ORM(对象关系映射)工具,它支持多种数据库,并提供了流畅的API和代码优先的开发方式。

EntityFramework-Core优势
代码优先:允许开发者使用C#代码定义数据库模型,EF Core会自动生成数据库表结构。
数据库迁移:支持数据库的版本控制,可以轻松地更新数据库结构。
查询和更新:提供LINQ查询API,可以使用C#语法进行数据库操作,同时支持异步操作,提高应用响应速度。
多数据库支持:可以与多种数据库(如SQL Server、MySQL、PostgreSQL等)无缝集成。

数据库操作的重要性
在Web应用中,数据库操作是核心功能之一,它涉及到数据的存储、检索、更新和删除。高效、安全的数据库操作对于提升应用性能、保证数据完整性至关重要。使用ORM工具如EF Core,可以简化这些操作,减少SQL语句的编写,同时提供更好的数据模型管理和事务处理能力。

创建数据库模型

使用EF Core,首先需要定义数据库模型。模型通常由实体类表示,实体类中的属性对应数据库表中的列。

// 定义一个实体类

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public DateTime CreatedAt { get; set; }
}

配置EF Core数据上下文

在项目中使用EF Core,需要在DbContext中定义数据上下文。

需要安装
Microsoft.EntityFrameworkCore和Microsoft.EntityFrameworkCore.SqlServer

using Microsoft.EntityFrameworkCore;

namespace ConsoleApp4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

public class ApplicationDbContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(
            @"Server=(localdb)\MSSQLLocalDB;Initial Catalog=mydb");
    }

    public DbSet<User> Users { get; set; }
}

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public DateTime CreatedAt { get; set; }
}

创建数据库

上面创建了模型,接下来使用迁移来创建数据库。这里需要借助一些工具,有关的两个工具集如下:

1).NET Core 命令行接口 (CLI) 工具可用于 Windows、Linux 或 macOS。 这些命令以 dotnet ef 开头。将 dotnet ef 安装为全局工具或本地工具。 大多数开发人员偏向于使用以下命令将 dotnet ef 安装为全局工具:
dotnet tool install --global dotnet-ef

2)包管理器控制台 (PMC) 工具在 Windows 上的 Visual Studio 中运行。 这些命令以动词开头,例如 Add-Migration、Update-Database。 获取适用于 EF Core 的包管理器控制台工具,需要安装 Microsoft.EntityFrameworkCore.Tools 包。
Install-Package Microsoft.EntityFrameworkCore.Tools

完整的迁移命令过程如下:
1.安装 dotnet ef

2.安装命令行 EF Core 开发的工具套件Microsoft.EntityFrameworkCore.Design。

3.添加第一次迁移

dotnet ef migrations add initialcreate
dotnet ef migrations add initialcreate
Build started...
Build succeeded.
Done. To undo this action, use 'ef migrations remove'

注:如果使用高版本的SQL SERVER或者SQL SERVER EXPRESS会提示错误:“证书链是由不受信任的颁发机构颁发的”,解决方法是添加 ;Trust Server Certificate=true 到连接字符串。 这将强制客户端在不进行验证的情况下信任证书。

4.将迁移应用到数据库

dotnet ef database update
Build started...
Build succeeded.
Applying migration '20250420124636_initialcreate'.
Done.

查询数据库,发现已经新建了数据库和表。

增删改查

using Microsoft.EntityFrameworkCore;

namespace ConsoleApp4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var dbContext = new ApplicationDbContext();
            var userinfo = dbContext.Users;

            Console.WriteLine("Inserting");
            dbContext.Users.Add(new User { Name = "Tom",  Email = "dese@123.com" });
            dbContext.SaveChanges();
            Console.WriteLine("Inserting complete.");

            Console.WriteLine("Querying");
            var user = dbContext.Users.OrderBy(b =>b.Id).FirstOrDefault();
            Console.WriteLine(user.Name);
            Console.WriteLine(user.Email);
            Console.WriteLine("Querying complete.");

            Console.WriteLine("Updating");
            user.Email = "234@gamil.com";
            dbContext.SaveChanges();
            Console.WriteLine(user.Name);
            Console.WriteLine(user.Email);
            Console.WriteLine("Updating complete.");

            Console.WriteLine("Delete");
            dbContext.Remove(user);
            dbContext.SaveChanges();
            Console.WriteLine("Delete complete.");

        }
    }
}

public class ApplicationDbContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(
            @"Server=(localdb)\MSSQLLocalDB;Initial Catalog=mydb");
    }

    public DbSet<User> Users { get; set; }
}

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public DateTime CreatedAt { get; set; }
}

Leave a Reply

Your email address will not be published. Required fields are marked *