企服版框架中ORM核心,基于YitIdHelper、Mapster、SqlSugar封装
License
—
Deps
13
Install Size
—
Vulns
✓ 0
Published
Feb 26, 2026
$ dotnet add package TJC.Cyclops.OrmCyclops.Orm是企服版框架中的ORM核心库,基于SqlSugar、Mapster和Yitter.IdGenerator进行封装,提供强大的数据访问和实体管理功能。该库采用仓储模式、工作单元模式和代码生成器,简化数据库操作,支持多租户、数据权限控制等企业级特性。
Entities命名空间包含框架内置的实体类,如:
Enums命名空间包含系统中使用的枚举类型,如:
通过NuGet包管理器安装:
Install-Package TJC.Cyclops.Orm
或通过.NET CLI安装:
dotnet add package TJC.Cyclops.Orm
在应用程序配置文件中添加数据库配置(以appsettings.json为例):
{
"DbConnection": {
"Default": {
"ConnectionString": "Server=localhost;Database=MyDatabase;User Id=sa;Password=your_password;",
"DbType": "SqlServer",
"IsAutoCloseConnection": true
},
"Read": [
{
"ConnectionString": "Server=localhost;Database=MyDatabase;User Id=readonly;Password=your_password;",
"DbType": "SqlServer",
"IsAutoCloseConnection": true
}
]
}
}
在应用启动时初始化ORM:
// 配置依赖注入
services.AddSingleton(provider =>
{
var options = new DbConnectionOptions();
// 从配置中读取数据库连接信息
return options;
});
// 初始化CyclopsOrm
CyclopsOrm.Init(options);
using Cyclops.Orm.Attributes;
using Cyclops.Orm.Models;
[SugarTable("tb_product")]
public class Product : EntityBaseId
{
[SugarColumn(ColumnDescription = "产品名称")]
public string Name { get; set; }
[SugarColumn(ColumnDescription = "产品价格")]
public decimal Price { get; set; }
[SugarColumn(ColumnDescription = "产品描述")]
public string Description { get; set; }
[SugarColumn(ColumnDescription = "是否启用")]
public bool IsEnabled { get; set; }
[OwnerUser]
[SugarColumn(ColumnDescription = "创建人")]
public long CreateUser { get; set; }
[OwnerOrg]
[SugarColumn(ColumnDescription = "所属组织")]
public long OrgId { get; set; }
}
using Cyclops.Orm;
using Cyclops.Orm.Models;
// 创建仓储实例
var productRepository = new BaseRepository<Product>();
// 添加产品
var product = new Product
{
Name = "测试产品",
Price = 99.9M,
Description = "这是一个测试产品",
IsEnabled = true,
CreateUser = 1,
OrgId = 1
};
var newId = await productRepository.InsertReturnSnowflakeIdAsync(product);
// 查询产品
var query = await productRepository.GetListAsync(p => p.IsEnabled == true);
// 更新产品
product.Price = 129.9M;
await productRepository.UpdateAsync(product);
// 删除产品
await productRepository.DeleteByIdAsync(newId);
using Cyclops.Orm.Interfaces;
using Cyclops.Orm.Attributes;
// 通过构造函数注入工作单元
private readonly IUnitOfWork _unitOfWork;
public ProductService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
// 使用工作单元管理事务
[UnitOfWork]
public async Task<bool> UpdateProductWithStockAsync(Product product, int stockChange)
{
var productRepository = _unitOfWork.GetRepository<Product>();
var stockRepository = _unitOfWork.GetRepository<Stock>();
// 更新产品信息
await productRepository.UpdateAsync(product);
// 更新库存信息
var stock = await stockRepository.GetByIdAsync(product.Id);
stock.Quantity += stockChange;
await stockRepository.UpdateAsync(stock);
// 工作单元会自动提交事务,如果发生异常会自动回滚
return true;
}
using Cyclops.Orm.Generating;
// 生成代码
var generator = new CodeGenerator();
// 生成实体代码
await generator.GenerateEntitiesAsync("ConnectionString", "OutputPath");
// 生成仓储代码
await generator.GenerateRepositoriesAsync("ConnectionString", "OutputPath");
// 设置当前租户ID
CyclopsOrm.SetCurrentTenant(1001);
// 后续操作会自动过滤当前租户数据
var products = await productRepository.GetListAsync();
// 设置用户数据权限范围
CyclopsOrm.SetUserScope(userId, EnumDataScope.OrgAndChild);
// 查询会自动应用数据权限过滤
var users = await userRepository.GetListAsync();
public class ProductRepository : BaseRepository<Product>
{
// 添加自定义查询方法
public async Task<List<Product>> GetHotProductsAsync(int top = 10)
{
return await Context.Queryable<Product>()
.Where(p => p.IsEnabled == true)
.OrderBy(p => p.CreateTime, OrderByType.Desc)
.Take(top)
.ToListAsync();
}
}
public class CustomDataFilter : IEntityFilter
{
public Expression<Func<T, bool>> GetFilter<T>() where T : class, new()
{
// 返回自定义过滤条件
return entity => true; // 示例:添加自定义过滤逻辑
}
}
保留所有权利