9.12、切面上下文(TangentDbContext)

切面上下文是一种全新的面向切面操作数据库方式。

什么是切面上下文

切面上下文是 Hoa Framework 框架独创的面向切面方式操作数据库方式,主要用来解决 sql 语句、存储过程、函数调用情况。

可能有些时候我们避免不了写 sql 的方式(特别注意,除非 Linq/Lambda 方式不能做到,才用切面上下文),如:

传统写法(以后不推荐)

// sql方式
_testRepository.FromSql("select name from test where id=@id"
        , new SqlParameter[]{ new SqlParameter("@id", 1) });
        
// 执行存储过程
_testRepository.SqlProcedureQuery("PROC_Name", new ProcModel(){});

// 执行函数
_testRepository.SqlFunctionQuery("Func_Name", new FuncModel(){});

上面的方式似乎没有上面问题,但是如果多个地方需要用到这些 sql 或 存储过程 或 函数调用,就会散落到处都是,不利于维护

所以,Hoa Framework 框架设计出全新的方式,主要用来解决上述代码多次调用散落问题。

如何使用(推荐)

第一步

定义一个接口(只需要接口),并继承 ITangentDependency接口,如:IFallScatteredQuery,如:

第二步

通过依赖注入 ITangentDbContext 切面上下文接口,并调用 For<T> 进行初始化,如:

神奇吧!通过这种方式,Hoa Framework 会自动查询数据库并转换成指定的结果。再也不怕代码难维护了!😘

特性说明

目前 切面上下文支持 三种 特性解析:

  • [Sentence(sql, DbContextIdentifier=)]:支持传入 sql 语句,支持命令参数防止 sql 注入。

  • [Procedure(name, DbContextIdentifier=)]:支持传入存储过程名称

  • [ScalarFunction(name, DbContextIdentifier=)]:支持传入函数名称

其中 DbContextIdentifier 参数是 Type 类型,也就是 数据库上下文标识类。见 9.11、多上下文、读写分离 章节

支持返回值

TangentDbContext 几乎支持所有返回值类型,如:

  • Object

  • 除了 Enum 以外的所有值类型和 string 类型,如:int, bool, decimal, string, float, long等等

  • 所有可枚举集合类型,包括 ArrayListIEnumerable

  • DataTableDataSet 类型

  • ValueTuple 元组类型

支持元组返回多个值

支持复杂类型返回并自动映射

多上下文配置

切面上下文还支持多上下文操作,如:

自动映射到Dto类型

通常我们数据库返回的是我们的实体模型,这个时候,我们还需要手动的调用 .Adapt<DtoType>DtoType 类型,所以,切面上下文提供了一种更加便捷的方式,只需要指定 SouceType 即可,如:

特别注意

不建议在切面上下文中做 增删改操作(即使框架本身支持)!!!!

最后更新于

这有帮助吗?