mcpField
E
entity-framework

entity-framework

github.com/stuartf303数据与数据库42 次安装
代码仓库

关于 entity-framework

面向使用 EF Core 的开发者,提供 Sorcha 的 EF Core 9+ 与 PostgreSQL 数据访问模式指南,涵盖仓储、软删除和迁移。

主要功能

  1. 01PostgreSQL DbContext 配置
  2. 02通用及专用仓储模式
  3. 03软删除查询过滤器
  4. 04迁移创建与启动时应用
  5. 05JSONB 与批量更新

适用场景

  1. 01为 Sorcha 服务配置数据库
  2. 02实现带可选关联加载的仓储
  3. 03管理软删除数据
  4. 04创建并应用数据库迁移

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/stuartf303/sorcha --skill entity-framework

安装后在 Claude Code 中输入/entity-framework确认已加载。

附带文件references/patterns.mdreferences/workflows.md

详细介绍

Entity Framework Core 技能

Sorcha 使用 EF Core 9+ 和 PostgreSQL(Npgsql)作为主要关系型数据存储。代码库采用分层仓储模式,包含通用和专用仓储,通过查询筛选器实现软删除,并在启动时自动执行迁移。

快速开始

使用 PostgreSQL 注册 DbContext
// src/Common/Sorcha.Storage.EFCore/Extensions/EFCoreServiceExtensions.cs
services.AddDbContext<WalletDbContext>((sp, options) =>
{
    var dataSource = sp.GetRequiredService<NpgsqlDataSource>();
    options.UseNpgsql(dataSource, npgsql =>
    {
        npgsql.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorCodesToAdd: null);
        npgsql.MigrationsHistoryTable("__EFMigrationsHistory", "wallet");
    });
});
创建迁移
# From project directory containing DbContext
dotnet ef migrations add InitialSchema --project src/Common/Sorcha.Wallet.Core --startup-project src/Services/Sorcha.Wallet.Service
以编程方式应用迁移
// Startup pattern used in Sorcha services
var pending = await dbContext.Database.GetPendingMigrationsAsync();
if (pending.Any())
    await dbContext.Database.MigrateAsync();

核心概念

概念用途示例
DbContext架构定义 + 更改跟踪WalletDbContext、TenantDbContext
Repository数据访问抽象EFCoreRepository<T, TId, TContext>
软删除对 DeletedAt 使用查询筛选器.HasQueryFilter(e => e.DeletedAt == null)
JSONBPostgreSQL JSON 列.HasColumnType("jsonb")
ExecuteUpdate无需加载数据即可批量更新ExecuteUpdateAsync(s => s.SetProperty(...))

常见模式

使用可选预先加载的仓储
// src/Common/Sorcha.Wallet.Core/Repositories/EfCoreWalletRepository.cs
public async Task<WalletEntity?> GetByAddressAsync(string address, bool includeAddresses = false)
{
    IQueryable<WalletEntity> query = _context.Wallets;
    
    if (includeAddresses)
        query = query.Include(w => w.Addresses);
    
    return await query.AsNoTracking().FirstOrDefaultAsync(w => w.Address == address);
}
使用筛选器绕过软删除
// Bypass query filter for admin operations
var deleted = await _context.Wallets
    .IgnoreQueryFilters()
    .FirstOrDefaultAsync(w => w.Address == address);

另请参阅

  • 模式 - DbContext 配置、实体映射、查询优化
  • 工作流 - 迁移命令、测试模式、部署

相关技能

  • 有关连接配置和 PostgreSQL 特定功能,请参阅 postgresql 技能
  • 有关服务注册和运行状况检查,请参阅 aspire 技能
  • 有关使用 InMemory 提供程序测试 DbContext,请参阅 xunit 技能

文档资源

使用 Context7 获取最新的 EF Core 文档。

库 ID: /dotnet/entityframework.docs

推荐查询:

  • "DbContext pooling configuration dependency injection"
  • "migrations code-first apply production deployment"
  • "query filters soft delete global filters"
  • "bulk operations ExecuteUpdate ExecuteDelete"

评论

支持 Markdown