Table of Contents

FreeSql ORM 适配

TKWF.Domain.FreeSql 提供 FreeSql 作为 TKWF 框架的数据层实现。


安装

dotnet add package TKWF.Domain.FreeSql

配置

// Program.cs
builder.ConfigWebAppDomain<AppUserInfo, AppDomainInitializer>(options =>
{
    options.Data.UseFreeSql(fsql =>
    {
        fsql.ConnectionString = "Data Source=localhost;Database=tkf;...";
        fsql.Provider = FreeSqlProvider.SqlServer;
        fsql.AutoSyncStructure = true;   // 自动同步表结构
    });
});

支持的数据库

数据库 FreeSqlProvider
SQL Server FreeSqlProvider.SqlServer
PostgreSQL FreeSqlProvider.PostgreSQL
MySQL FreeSqlProvider.MySql
SQLite FreeSqlProvider.Sqlite
Oracle FreeSqlProvider.Oracle

仓储模式

[GenerateController]
public class TodoService(DomainUser<AppUserInfo> user)
    : DomainServiceBase<AppUserInfo>(user)
{
    // FreeSql 仓储通过 Repository 属性访问
    public async Task<List<Todo>> GetTodosAsync()
    {
        return await Repository
            .Where(t => t.UserId == User.UserId)
            .OrderByDescending(t => t.CreatedAt)
            .ToListAsync();
    }
}

事务支持

配合 [Transactional] 实现自动事务管理:

[Transactional]
public async Task TransferAsync(long fromId, long toId, decimal amount)
{
    // 任一失败自动回滚
    await Repository.UpdateAsync(new Account(fromId) { Balance -= amount });
    await Repository.UpdateAsync(new Account(toId) { Balance += amount });
}

参考