告别 ORM 选型焦虑!mooSQL:C# 专属高性能 SQL 工具集,灵活到骨子里

0 阅读5分钟

作为 C# 开发者,你是不是也卡在这些数据访问的痛点里:

  • 用 EF Core 太厚重,LINQ 翻译慢还控不住原生 SQL?
  • 用 Dapper 灵活但缺类型安全,手写 SQL 满屏魔法字符串?
  • 多数据库切换成本高,主从架构、数据权限还要重复造轮子?
  • 遗留系统改造,EF Core/SqlSugar 实体想复用却兼容难?

今天要安利的「mooSQL」🐄,是专为 C# 开发者打造的高性能 SQL 工具集 —— 既保留原生 SQL 的灵活掌控,又兼具 ORM 的便捷与类型安全,还能无缝适配多库、权限、DDD 等企业级场景,彻底解决数据访问层的选型纠结!

🎯 mooSQL 到底能解决什么核心问题?

1. 「熟悉感拉满」:链式 API 贴近原生 SQL,上手零成本

不用重新学习晦涩的语法,mooSQL 的链式 API 和 SQL 结构完全对齐:select/from/where对应原生 SELECT/FROM/WHERE,setPage一键生成分页,orderby/groupBy语义化到底,哪怕是新手也能 5 分钟上手写复杂查询。

2. 「灵活不绑死」:既要便捷,更要掌控力

  • 不想被厚重抽象限制?直接拼接 SQL 片段,原生 SQL 想怎么写就怎么写;
  • 怕魔法字符串踩坑?SQLClip 模式提供类型安全,实体条件直观无歧义;
  • 复杂场景控不住?支持 WITH、MERGE、多表 JOIN、虚拟 SQL 列,媲美 MyBatis 的 SQL 碎片复用,还保留 C# 的过程控制能力。

3. 「高性能不妥协」:拒绝重 LINQ 翻译开销

驱动层设计对标 Dapper,摒弃冗余的 LINQ 翻译流程,简单查询性能直逼ADO.NET;同时兼顾便捷性,不用手写重复的数据库连接、参数化逻辑,高性能和高效率两手抓。

4. 「企业级场景全覆盖」:从多库到权限,开箱即用

  • 多数据库原生支持:SQL Server、MySQL、PostgreSQL、Oracle、SQLite、OceanBase、Taos 等一网打尽,方言适配友好;
  • 天生多库模式:切换数据库成本极低,主从架构一键适配;
  • 细粒度数据权限:内置 AuthBuilder,支持用户维度、组织维度、自定义规则的权限过滤,不用重复造权限轮子;
  • 事务管理:完整的 UnitOfWork 工作单元,实体操作与手写 SQL 共享事务,一致性有保障;
  • 可观测性:日志、错误、慢 SQL 监控全覆盖,运维排查问题更高效。

5. 「零迁移成本」:兼容现有实体体系

不用推翻重构!可直接与 EF Core、SqlSugar 等现有实体风格兼容,遗留系统改造时,既能复用旧实体,又能享受 mooSQL 的灵活与性能,平滑过渡无压力。

✨ mooSQL 核心亮点:不止是 SQL 构建器

表格

核心能力解决痛点
三种查询模式SQLBuilder(灵活)+ SQLClip(类型安全)+ Repository(领域驱动),适配不同开发习惯
强扩展能力扩展方法可集成权限过滤、业务规则等横切逻辑,流程引擎 / 低代码平台也能细粒度操控数据层
零迁移成本兼容 EF Core/SqlSugar 实体,ADO.NET项目可平滑过渡
企业级特性数据权限、UnitOfWork、慢 SQL 监控,满足中大型项目需求

🚀 快速上手:5 分钟跑通第一个查询

第一步:安装包(推荐扩展版,含多数据库方言)

bash

运行

dotnet add package mooSQL.Ext.Core

(核心纯净版:dotnet add package mooSQL.Pure.Core

第二步:基础配置

csharp

运行

var builder = new DBClientBuilder();
var cache = new MooCache();
var dbCash = builder
    .useCache(cache)
    .useEnityAnalyser(new SugarEnitiyParser()) // 兼容SqlSugar实体
    .doBuild();

// 配置数据库连接
dbCash.addConfig(yourConnectionConfigs);

第三步:三种查询模式示例

1. SQLBuilder:灵活语义化,贴近原生 SQL

csharp

运行

var kit = DBCash.useSQL(0);
// 复杂查询+分页+关联查询
var result = kit
    .select("u.*, d.Name as DeptName")
    .from("Users u")
    .join("left join Department d on u.DeptId = d.Id")
    .where("u.Status", 1)
    .whereIn("u.Id", new[] {1,2,3})
    .whereExist((sub) => {
        sub.select("1").from("UserRoles ur").where("ur.UserId = u.Id");
    })
    .orderby("u.CreateTime desc")
    .setPage(20, 1) // 分页:每页20条,第1页
    .query<User>();

// 增删改示例
kit.setTable("Users")
   .set("Name", "张三")
   .set("Email", "zhangsan@example.com")
   .doInsert();

2. SQLClip:类型安全,告别魔法字符串

csharp

运行

var clip = DBCash.useClip(0);
var data = clip
    .from<Order>(out var o)
    .join<OrderItem>(out var item)
    .on(() => o.Id == item.OrderId)
    .where(() => o.Status == OrderStatus.Paid)
    .where(() => o.CreateTime >= DateTime.Now.AddDays(-7))
    .select(() => new {
        o.OrderNo,
        o.TotalAmount,
        item.Quantity
    })
    .queryList();

3. Repository:领域驱动,适配 DDD 场景

csharp

运行

var repo = DBCash.useRepo<User>(0);
// 简单查询
var activeUsers = repo.GetList(u => u.Status == UserStatus.Active);
// 分页查询
var pagedUsers = repo.GetPageList(1, 20, (c, u) => {
    c.where(() => u.Status == UserStatus.Active)
     .orderByDesc(() => u.CreateTime);
});

第四步:企业级能力示例(数据权限)

csharp

运行

// 扩展方法集成权限过滤
var kit = DBCash.useSQL(0);
kit.select("a.*")
   .from("Orders a")
   .where("a.Status", 1)
   .useAuth((auth) => {
       auth.useUserFK("a.UserId") // 过滤用户有权限的订单
           .useOrgLike("a.OrgCode") // 按组织维度过滤
           .useCustomRule(yourParam); // 自定义权限规则
   })
   .query();

🎯 谁该用 mooSQL?

  • C# 开发者:想要类 SQL 语法的轻量化数据访问,拒绝 ORM 过度封装;
  • 遗留系统改造:团队以 SQL 为主,想复用 EF Core/SqlSugar 实体;
  • 高性能场景:需要简单查询极致性能,避免重 LINQ 翻译开销;
  • 企业级项目:多数据库、主从架构、细粒度数据权限需求;
  • DDD 实践者:需要 Repository + UnitOfWork 的领域驱动模式;
  • 低代码 / 流程引擎开发:需要细粒度操控数据层,自定义扩展逻辑。

📎 项目地址

GitHub:github.com/sailuosi/mo…(主仓库)

文档:sailuosi.github.io/moosql-doc/

🙋 欢迎交流

如果在使用中遇到问题、有新功能建议,或者想一起完善这个项目,都可以在 GitHub 提 Issue/PR,也可以在评论区聊聊你在 C# 数据访问层踩过的坑~

mooSQL 的初衷,是让 C# 开发者既能享受原生 SQL 的掌控力,又不用重复造轮子解决权限、多库、事务等通用问题。觉得有用的话,别忘了给项目点个⭐️,你的支持是持续迭代的最大动力!