Skip to content

CQRS

CQRS:命令查询职责隔离,命令是指 插入、修改、删除,就是更改数据的动作.通过 Freesql 解决单一数据模型带来的查询尴尬场面。 当前架构下,Freesql 和 ef 不在一个事务,最好实现就是用来做查询,比如分页查询。

配置

C#
public class AbpProFreeSqlModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        var configuration = context.Services.GetConfiguration();
        var connectionString = configuration.GetConnectionString("Default");
        var freeSql = new FreeSql.FreeSqlBuilder()
            .UseConnectionString(FreeSql.DataType.MySql, connectionString)
            .Build();

        context.Services.AddSingleton<IFreeSql>(freeSql);
    }
}

使用

  • 在 Domain 层添加接口
C#
1
2
3
4
public interface IUserFreeSqlBasicRepository
{
    Task<List<UserOutput>> GetListAsync();
}
  • 在 Freesql 层添加实现
C#
public class UserFreeSqlBasicRepository : FreeSqlBasicRepository, IUserFreeSqlBasicRepository
{
    public async Task<List<UserOutput>> GetListAsync()
    {
        var sql = "select id from AbpUsers";
        var result = await FreeSql.Select<UserOutput>()
        .WithSql(sql)
        .ToListAsync();
        return result;
    }
}