EntityFramework Reverse POCO Code First Generator核心功能解析:POCO类、DbContext与配置映射
【免费下载链接】EntityFramework-Reverse-POCO-Code-First-GeneratorEntityFramework Reverse POCO Code First Generator - Beautifully generated code that is fully customisable. This generator creates code as if you reverse engineered a database and lovingly created the code by hand. It is free to academics, commercial use requires a paid licence. Obtain your licence from:项目地址: https://gitcode.com/gh_mirrors/en/EntityFramework-Reverse-POCO-Code-First-Generator
EntityFramework Reverse POCO Code First Generator(EFRPG)是一款强大的数据库逆向工程工具,能够将现有数据库结构转换为优雅的EntityFramework Code First代码。它自动生成POCO类、DbContext、配置映射和接口等组件,让开发者无需手动编写数据访问层代码,大幅提升开发效率。
🌟 什么是POCO类生成?
POCO(Plain Old CLR Object)类是EFRPG的核心输出之一,这些类与数据库表结构一一对应,但不包含任何数据访问逻辑,保持了纯粹的业务实体特性。生成的POCO类具有以下特点:
- 简洁优雅:自动应用C#命名规范,属性名称采用PascalCase格式
- 数据注解支持:可配置生成数据注解(如
[Required]、[MaxLength]) - 导航属性:自动生成实体间关系的导航属性
- JSON列映射:支持将JSON类型列直接映射为复杂对象类型
通过Settings.IncludeFieldNameConstants配置,还可以为POCO类添加字段名常量,避免使用"魔术字符串":
public const string ShippingAddressField = "ShippingAddress"; public Address ShippingAddress { get; set; }📦 灵活的DbContext生成与配置
DbContext是EntityFramework中的数据访问核心,EFRPG提供了高度可定制的DbContext生成功能:
基本配置
在T4模板文件(如Database.tt)中,通过简单设置即可定制DbContext:
Settings.DbContextName = "NorthwindDbContext"; // DbContext类名 Settings.DbContextInterfaceName = "INorthwindDbContext"; // 生成接口 Settings.DbContextBaseClass = "DbContext"; // 基类 Settings.AddIDbContextFactory = true; // 生成工厂类多上下文支持
EFRPG支持从单个数据库生成多个DbContext,通过设置Settings.GenerateSingleDbContext = false启用:
// 多上下文配置示例 Settings.GenerateSingleDbContext = false; Settings.AddMultiContextFilter(new MultiContextFilter { ContextName = "AppleDbContext", TableFilter = t => t.Schema == "apple" }); Settings.AddMultiContextFilter(new MultiContextFilter { ContextName = "BananaDbContext", TableFilter = t => t.Schema == "banana" });生成的多上下文文件结构清晰,每个上下文独立管理相关实体:
Multi context many files/ ├── Contexts/ │ ├── AppleDbContext.cs │ ├── BananaDbContext.cs │ └── CherryDbContext.cs ├── Interfaces/ │ ├── IAppleDbContext.cs │ └── IBananaDbContext.cs └── Entities/ ├── Apple.cs └── Banana.cs单元测试支持
通过启用Settings.AddUnitTestingDbContext,EFRPG会自动生成FakeDbContext和FakeDbSet,方便进行单元测试:
Settings.AddUnitTestingDbContext = true; Settings.FakeDbContextInDebugOnlyMode = true; // 仅在Debug模式包含生成的测试上下文允许开发者在不连接真实数据库的情况下测试业务逻辑:
var fakeContext = new FakeNorthwindDbContext(); fakeContext.Customers.Add(new Customer { Id = 1, Name = "Test" }); // 测试业务逻辑...🗺️ 强大的配置映射功能
EFRPG提供多种配置映射方式,满足不同场景需求:
Fluent API配置
默认生成独立的配置类,采用Fluent API风格:
// CustomerConfiguration.cs public class CustomerConfiguration : IEntityTypeConfiguration<Customer> { public void Configure(EntityTypeBuilder<Customer> builder) { builder.HasKey(c => c.CustomerId); builder.Property(c => c.CompanyName) .IsRequired() .HasMaxLength(40); builder.HasMany(c => c.Orders) .WithOne(o => o.Customer) .HasForeignKey(o => o.CustomerId); } }这些配置类位于Configuration文件夹中,与实体类分离,保持代码整洁。
数据注解配置
如需使用数据注解,可通过设置启用:
Settings.UseDataAnnotations = true;生成的实体类将直接包含数据注解:
public class Customer { [Key] public int CustomerId { get; set; } [Required] [MaxLength(40)] public string CompanyName { get; set; } // 其他属性... }JSON列映射
EFRPG支持将数据库JSON类型列直接映射为C#对象,避免手动序列化/反序列化。首先定义映射的POCO类:
public class Address { public string Street { get; set; } public string City { get; set; } public string PostalCode { get; set; } }然后在设置中配置映射:
Settings.AddJsonColumnMappings = delegate (List<JsonColumnMapping> mappings) { mappings.Add(new JsonColumnMapping { Schema = "dbo", Table = "Orders", Column = "ShippingAddress", PropertyType = "Address", AdditionalNamespace = "MyApp.Models" }); };生成的实体类将包含强类型属性:
public Address ShippingAddress { get; set; }在EF Core中,可使用Owned Types配置JSON列:
modelBuilder.Entity<Order>() .OwnsOne(o => o.ShippingAddress, sa => { sa.ToJson(); });🚀 快速开始使用
1. 安装与设置
首先克隆仓库:
git clone https://gitcode.com/gh_mirrors/en/EntityFramework-Reverse-POCO-Code-First-Generator2. 配置数据库连接
在T4模板文件(如Northwind.tt)中设置连接字符串:
Settings.ConnectionStringName = "NorthwindDbContext";3. 定制生成选项
根据需求修改设置:
Settings.GenerateSingleDbContext = true; Settings.AddUnitTestingDbContext = true; Settings.UseDataAnnotations = false; // 添加JSON映射等其他配置...4. 运行生成器
保存T4模板文件,Visual Studio将自动运行生成器,生成的代码将出现在模板文件下方。
🎯 核心优势总结
- 节省时间:自动生成数据访问层代码,减少手动编写工作
- 高度可定制:通过丰富的设置调整生成代码的各个方面
- 支持多数据库:兼容SQL Server、PostgreSQL、SQLite等多种数据库
- 单元测试友好:自动生成FakeDbContext,便于测试
- 现代化特性:支持JSON列映射、EF Core Owned Types等高级特性
EFRPG让数据库优先开发变得简单而高效,生成的代码如同手动编写般清晰优雅,是EntityFramework开发者的必备工具。无论你是新手还是经验丰富的开发者,都能从中获得显著的效率提升。
【免费下载链接】EntityFramework-Reverse-POCO-Code-First-GeneratorEntityFramework Reverse POCO Code First Generator - Beautifully generated code that is fully customisable. This generator creates code as if you reverse engineered a database and lovingly created the code by hand. It is free to academics, commercial use requires a paid licence. Obtain your licence from:项目地址: https://gitcode.com/gh_mirrors/en/EntityFramework-Reverse-POCO-Code-First-Generator
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考