代码生成
本页用于说明 .NET 后端在开发新业务模块时的代码生成与起步方式。
适用场景
- 已有业务表结构,希望快速生成基础 CRUD 骨架
- 希望在新模块中保持命名、分层与接口约定一致
推荐方式
- EF Core Reverse Engineering(从现有数据库生成实体)
- IDE 代码片段(按团队习惯选择)
- dotnet-aspnet-codegenerator
EF Core 逆向工程
从现有数据库生成实体类:
bash
dotnet ef dbcontext scaffold "Server=localhost;Port=3306;Database=youlai_admin;User=root;Password=123456" \
Pomelo.EntityFrameworkCore.MySql \
--output-dir Domain/Entities \
--context-dir Infrastructure/Persistence \
--context YoulaiDbContext \
--force模块开发建议
推荐目录结构:Youlai.Application.<Module>。
一个最小业务模块通常包含:
- Entity(领域层)
- Repository(基础设施层)
- Service / IService(应用层)
- Controller(API 层)
- DTO / Form / Query(应用层)
接口调试入口:http://localhost:8000/swagger。
手动创建模块示例
实体类
csharp
// Domain/Entities/SysNotice.cs
public class SysNotice
{
public long Id { get; set; }
public string? Title { get; set; }
public string? Content { get; set; }
public int Status { get; set; }
public DateTime CreateTime { get; set; }
}服务接口
csharp
// Application/System/Services/INoticeService.cs
public interface INoticeService
{
Task<PageResult<NoticePageDto>> GetNoticePageAsync(NoticeQuery query);
Task<NoticeForm?> GetNoticeFormAsync(long id);
Task<bool> SaveNoticeAsync(NoticeForm form);
Task<bool> DeleteNoticesAsync(string ids);
}服务实现
csharp
// Infrastructure/Services/NoticeService.cs
internal sealed class NoticeService : INoticeService
{
private readonly YoulaiDbContext _dbContext;
public NoticeService(YoulaiDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<PageResult<NoticePageDto>> GetNoticePageAsync(NoticeQuery query)
{
// 实现分页查询逻辑
}
}控制器
csharp
// Api/Controllers/System/NoticesController.cs
[ApiController]
[Route("api/v1/notices")]
public class NoticesController : ControllerBase
{
private readonly INoticeService _noticeService;
public NoticesController(INoticeService noticeService)
{
_noticeService = noticeService;
}
[HttpGet]
public async Task<PageResult<NoticePageDto>> GetNoticePage([FromQuery] NoticeQuery query)
{
return await _noticeService.GetNoticePageAsync(query);
}
}依赖注入注册
在 DependencyInjection.cs 中注册服务:
csharp
services.AddScoped<INoticeService, NoticeService>();