备忘:无符号数和有符号数互转公式的证明
Abp 源码分析(4):Unit of work
一、概述
工作单元是”对象-关系”行为的一种模式。维护受业务事务影响的对象列表,并协调变化的写入和并发问题的解决。——《企业应用架构模式》
1、工作单元的作用
工作单元只是将所有修改状态保存下来,在适当的时候在同一数据库连接和事务处理上下文中一次性将对象的变更提交到数据中。额外的优点是既减少了数据库调用次数,又避免数据库长事务。
同一个工作单元一般不要跨线程使用。
2、工作单元和仓储(Repository)模式
工作单元常与仓储(Repository)模式一起使用。因为多个 Repository 可能做出多处更改,如果在 Repository 中调用 DbContext.SaveChanges 或 DbContext.SaveChangesAsync(如果使用 Entity Framework 的话),则产生了多个相互隔离开的事务。
实际上
Entity Framewok也实现了仓储模式(DbSet<T>)和工作单元模式(DbContext)。
3、工作单元和依赖注入(拦截器)
直接使用工作单元也是可以的。配合依赖注入和拦截器能将工作单元的创建和完成提交的工作自动化,也就是说避免了手工创建工作单元和手工调用 Complete/Commit 。这种自动化使得应对复杂业务逻辑时不用过于关注业务无关的事务安全问题。
ASP.NET Core 授权的扩展:使用 IAuthorizationPolicyProvider 的自定义授权策略提供程序
一、概述

去年写过一篇《ASP.NET Core 授权的扩展:自定义 Authorize Attribute 和 IApplicationModelProvide》,由于在 ASP.NET Core 3 中,Microsoft.AspNetCore.Mvc.Internal 命名空间下的 AuthorizationApplicationModelProvider 类由 public 被改为了 internal,使得无法方便地将其从容器中 DI 容器中移除,所以不得不回到 IAuthorizationPolicyProvider 上来。
ASP.NET Core 提供了基于角色( Role )、声明( Chaim ) 和策略 ( Policy ) 等的授权方式。在实际应用中,可能采用部门( Department , 本文采用用户组 Group )、职位 ( 可继续沿用 Role )、权限( Permission )的方式进行授权。本文通过自定义 IAuthorizationPolicyProvider 进行扩展。