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等等所有可枚举集合类型,包括
Array,List,IEnumerable等DataTable和DataSet类型ValueTuple元组类型
支持元组返回多个值
支持复杂类型返回并自动映射
多上下文配置
切面上下文还支持多上下文操作,如:
自动映射到Dto类型
通常我们数据库返回的是我们的实体模型,这个时候,我们还需要手动的调用 .Adapt<DtoType> 到 DtoType 类型,所以,切面上下文提供了一种更加便捷的方式,只需要指定 SouceType 即可,如:
特别注意
不建议在切面上下文中做 增删改操作(即使框架本身支持)!!!!
最后更新于
这有帮助吗?