📜  从 db efcore 生成 poco (1)

📅  最后修改于: 2023-12-03 14:49:17.109000             🧑  作者: Mango

从 EFCore 生成 POCO

在使用 Entity Framework Core (EFCore) 管理数据库时,我们可以使用 EFCore 提供的工具自动生成 POCO(Plain Old CLR Object),即简单的纯 C# 对象,用于表示数据库中的实体类。本文将介绍如何使用 EFCore 工具生成 POCO,并探索其中的细节和注意事项。

EFCore 工具

EFCore 提供了一组命令行工具,可以用于在开发过程中自动完成诸如数据库迁移、生成 POCO、执行 LINQ 查询等任务。在本文中,我们要使用的工具是 dotnet ef。这个工具是通过在终端中输入命令来执行的。

首先,我们需要安装 dotnet ef 工具。可以使用以下命令完成安装:

dotnet tool install --global dotnet-ef

安装完成后,我们就可以在命令行中使用 dotnet ef 工具了。

生成 POCO

接下来,我们将使用 dotnet ef 工具生成 POCO。我们将使用 SQL Server 作为我们的数据库,假设我们有一个名为 MyDb 的数据库,其中包含一个名为 Users 的表格。

我们首先需要创建一个 EFCore 的 DbContext(上下文)类。这个类是用于对数据库进行管理的核心类。在这个类中,我们将定义每一个表格的数据类型,以及它们之间的关系。

以下是一个以 Users 表格为基础的 DbContext 类:

// MyDbContext.cs
using Microsoft.EntityFrameworkCore;

namespace MyNamespace
{
    public class MyDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=MyDb;Trusted_Connection=True;");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>(entity =>
            {
                entity.HasKey(e => e.Id);
                entity.Property(e => e.Name).IsRequired();
                entity.Property(e => e.Age).IsRequired();
            });
        }
    }

    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

在这个类中,我们定义了 MyDbContext 类,并将 Users 表格的数据类型定义为一个 DbSet 属性。此外,我们还在 OnConfiguring() 方法中配置了连接字符串,使得 EFCore 可以连接到数据库。最后,在 OnModelCreating() 方法中,我们定义了 User 类的属性类型,以及它们的约束条件。

接下来,在命令行中,使用以下命令生成 POCO 类:

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=MyDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

这个命令将在 Models 目录下生成包含各个表格数据类型的 POCO 类。在本例中,就会生成一个名为 User.cs 的文件,其中包含了 User 类的定义,根据我们在 OnModelCreating() 方法中的设定,会在 NameAge 属性上加上了约束条件。

// User.cs
using System;
using System.Collections.Generic;

namespace MyNamespace.Models
{
    public partial class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}
注意事项

当我们使用 EFCore 工具生成 POCO 时,需要注意以下几点:

  • 我们需要先定义 DbContext 类,并在其中按需配置每一个表格和属性的数据类型;
  • 我们需要在命令行中使用 dotnet ef 工具来生成 POCO 类,可以使用 dotnet ef dbcontext scaffold 命令来完成;
  • 我们需要在命令行中指定数据库的连接字符串;
  • 生成出的 POCO 类只是我们的数据模型的一个表现,我们可以根据需求修改其属性、方法等,但需要注意不能影响生成的数据库结构。
总结

本文介绍了如何使用 EFCore 工具生成 POCO 类,让我们可以更加高效地管理我们的数据库。在使用工具时,我们需要先定义 DbContext 类,并在命令行中使用 dotnet ef 工具来生成 POCO 类。需要注意的是,生成出的 POCO 类只是我们的数据模型的一个表现,我们可以根据需求进行修改,但不能影响生成的数据库结构。