TRECA 崔佧智能低代码开发使用说明(续4)

3.3 使用教程

  1.  配置数据源

首选需要有数据库源,因为代码生成是根据数据库表来生成的。 菜单:开发=>开发=>数据库连接管理 

 

 若列表中没有目标数据源,则添加数据库连接 

 

 

数据连接名、连接字符串、数据库类型即可。添加完成后即可看到连接字符串信息。

  1. 生成代码

有了数据库连接之后,即可进行代码生成。 菜单:开发=>快速开发=>代码生成

 

选择数据库,然后勾选需要生成代码的数据库表,点击生成代码会弹出生成选项(这里暂时只能勾选Dev_Project,其余表全是系统基础表,不要勾选,否则会被覆盖,导致异常,请勾选自己的业务表进行生成):

 

生成选项中可以选择需要生成的类型,可以默认生成实体层、业务逻辑层、控制器和视图。也可以生成权限、主从表、报表、流程和API接口。

生成区域对应MVC中的Areas,请按需填入(必填)

这里示例填写ProjectManage,点击生成按钮,即可完成代码生成。生成后的代码在项目解决方案中,将代码文件包括进入项目

默认生成后的文件是隐藏的,需要点击显示所有文件按钮,即可看到生成后的新文件

 

右键新的文件夹,包括在项目中 实体层: 

 

 

业务层接口及实现: 

 

 

控制器及视图:

  

 

由于是新生成的代码,所以才配置新的菜单

 

如上图,在Web项目中的开发/菜单管理中配置菜单,模仿原有菜单即可,其中层级是菜单所属层,父级id是菜单的上一层,url地址是指页面的路径,权限Permission是指若需要访问此菜单需要的权限(对应权限配置),若没有此权限,则菜单也中不会显示此菜单,修改完成后重新编译生成(权限相关模块进行了缓存,重新生成会清缓存),重新运行即可看到新的项目菜单如下:

 

整个代码生成过程,无需编写代码即可完成一张表的CRUD,当然需要根据具体业务中进行相应的修改,本次示例中字段比较少,但是当一张表的字段很多时,那么此功能能够将开发效率提高几个档次。

1、权限管理

一般情况下,后台管理系统多少会涉及权限管理,因此本框架提供了一个灵活、高效、简洁的权限管理系统。

首先,权限分为两种,即操作权限和数据权限,其中操作权限包括系统用户权限和AppId权限,系统用户权限就是指操作用户具备哪些权限,而当对外提供Api接口时,为了保证接口的安全性(若不在意可忽略),通常会提供接口签名算法,其中AppId和AppSecret是必备的,通过对AppId设置权限,即可控制接口的权限。数据权限比较复杂,若采用纯SQL方式,那么会更加复杂,本框架全程采用EF作为ORM框架,通过对IQueryable< T >进行过滤,即可完成数据权限控制,详细使用方式见用户管理

用户权限:若对每个用户都设置对应的权限,那么工作量无疑是十分巨大的,因此引入了角色的概念,角色是权限的集合载体,那么属于此角色的用户就继承了角色的权限,当然某些特殊用户需要拥有自己的不属于角色的特殊权限,因此最终用户拥有的权限就是自己的权限和所属角色权限的并集。

权限使用:

 

设置权限的模块、权限项是我们在生成代码勾选权限产生的。

权限定义:

如上图,在Permission中定义了各个权限

权限配置:

在系统用户管理和系统角色管理中可以设置用户和角色的权限,把需要的权限勾选即可。

权限使用:

 

 

 

如上图所示,在需要控制权限的页面中,调用方法:PermissionManage.OperatorHasPermissionValue("sysuser.manage")

这个方法是判断操作者用户是否含有sysuser.manage权限值,其中sysuser是指Permission.config中定义的module的value属性,manage是指permission中的value属性,用.连接即是最终权限值。

更详细的使用方式,请参考源代码中的用户管理模块(菜单权限、操作权限、数据权限、联表查询、业务层AOP等使用方式均可参考此模块)

2、接口秘钥管理

菜单:系统=>接口秘钥管理

3、系统日志

菜单:系统=>系统日志

4、单库事务

使用方式如下:

BaseBusiness<Base_UnitTest> _baseBus  = new BaseBusiness<Base_UnitTest>();/*推荐使用using包裹,中途出异常自动回滚并释放事务,有效防止死锁具体只需要开始事务BeginTransaction()与结束事务EndTransaction(),BeginTransaction()可传入自定义事务隔离级别*/using (var transaction = _baseBus.BeginTransaction()){    _baseBus.Insert(_newData);    var newData2 = _newData.DeepClone();    newData2.Id = IdHelper.GetId();    _baseBus.Insert(newData2);    //res为元组,Success表示是否成功提交,若Success为false,则会有Ex异常信息,并且自动完成回滚并释放事务    bool res = _baseBus.EndTransaction().Success;}

在上面using过程中若出现异常(哪怕非数据库提交异常),也会自动回滚并释放事务

 

5、跨库事务

使用方式如下:

//默认连接数据库BaseDbBaseBusiness<Base_UnitTest> _bus1 = new BaseBusiness<Base_UnitTest>();//指定数据库连接字符串BaseDb_TestBaseBusiness<Base_UnitTest> _bus2 = new BaseBusiness<Base_UnitTest>("BaseDb_Test");Base_UnitTest data1 = new Base_UnitTest{    Id = Guid.NewGuid().ToString(),    UserId = "1",    UserName = Guid.NewGuid().ToString()};Base_UnitTest data2 = new Base_UnitTest{    Id = Guid.NewGuid().ToString(),    UserId = "1",    UserName = Guid.NewGuid().ToString()};Base_UnitTest data3 = new Base_UnitTest{    Id = Guid.NewGuid().ToString(),    UserId = "2",    UserName = Guid.NewGuid().ToString()};//DistributedTransaction中传入多个IRepository(BaseBusiness.Service)//使用方式与单库类似using (var distributedTransaction = new DistributedTransaction(_bus1.Service, _bus2.Service)){    distributedTransaction.BeginTransaction();    _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') ");    _bus1.Insert(data1);    _bus1.Insert(data2);    _bus2.Insert(data1);    _bus2.Insert(data3);    var succcess = distributedTransaction.EndTransaction();}

6、读写分离分库分表

本框架支持数据库读写分离分库分表(即Sharding),并且支持主流关系型数据库(SQLServer、Oracle、MySQL、PostgreSQL),理论上只要EF支持那么本框架支持。 由于技术原因以及结合实际情况,目前本框架仅支持单表的Sharding,即支持单表的CRUD、分页、统计(数量、最大值、最小值、平均值),支持跨库(表分散在不同的数据库中,不同类型数据库也支持)。具体如何使用如下:

  • Sharding配置 首先、要进行分库分表操作,那么必要的配置必不可少。配置代码如下:

ShardingConfigBootstrapper.Bootstrap()    //添加数据源    .AddDataSource("BaseDb", DatabaseType.SqlServer, dbBuilder =>    {        //添加物理数据库        dbBuilder.AddPhsicDb("BaseDb", ReadWriteType.ReadAndWrite);    })    //添加抽象数据库    .AddAbsDb("BaseDb", absTableBuilder =>    {        //添加抽象数据表        absTableBuilder.AddAbsTable("Base_UnitTest", tableBuilder =>        {            //添加物理数据表            tableBuilder.AddPhsicTable("Base_UnitTest_0", "BaseDb");            tableBuilder.AddPhsicTable("Base_UnitTest_1", "BaseDb");            tableBuilder.AddPhsicTable("Base_UnitTest_2", "BaseDb");        }, new ModShardingRule("Base_UnitTest", "Id", 3));    });

上述代码中完成了Sharding的配置: ShardingConfigBootstrapper.Bootstrap()在一个项目中只能执行一次,所以建议放到Application_Start中(ASP.NET Core中的Startup) AddDataSource是指添加数据源,数据源可以看做抽象数据库,一个数据源包含了一组同类型的物理数据库,即实际的数据库。一个数据源至少包含一个物理数据库,多个物理数据库需要开启主从复制或主主复制,通过ReadWriteType(写、读、写和读)参数来指定数据库的操作类型,通常将写库作为主库,读库作为从库。同一个数据源中的物理数据库类型相同,表结构也相同。 配置好数据源后就可以通过AddAbsDb来添加抽象数据库,抽象数据库中需要添加抽象数据表。如上抽象表Base_UnitTest对应的物理表就是Base_UnitTest_0、Base_UnitTest_1与Base_UnitTest_2,并且这三张表都属于数据源BaseDb。分表配置当然需要分表规则(即通过一种规则找到具体数据在哪张表中)。 上述代码中使用了最简单的取模分片规则, 源码如下:  可以看到其使用方式及优缺点。 另外还有一致性HASH分片规则 

 

 

 雪花Id的mod分片规则

 

 

上述的分片规则各有优劣,都实现IShardingRule接口,实际上只需要实现FindTable方法即可实现自定义分片规则。 实际使用中个人推荐使用雪花Id的mod分片规,这也是为什么前面数据库设计规范中默认使用雪花Id作为数据库主键的原因(PS,之前版本使用GUID作为主键被各种嫌弃,这次看你们怎么说)

  1. 使用方式 配置完成,下面开始使用,使用方式非常简单,与平常使用基本一致 首先获取分片仓储接口IShardingRepository

IShardingRepository _db = DbFactory.GetRepository().ToSharding();

然后即可进行数据操作:

Base_UnitTest _newData  = new Base_UnitTest{    Id = Guid.NewGuid().ToString(),    UserId = "Admin",    UserName = "超级管理员",    Age = 22};List<Base_UnitTest> _insertList = new List<Base_UnitTest>{    new Base_UnitTest    {        Id = Guid.NewGuid().ToString(),        UserId = "Admin1",        UserName = "超级管理员1",        Age = 22    },    new Base_UnitTest    {        Id = Guid.NewGuid().ToString(),        UserId = "Admin2",        UserName = "超级管理员2",        Age = 22    }};//添加单条数据_db.Insert(_newData);//添加多条数据_db.Insert(_insertList);//清空表_db.DeleteAll<Base_UnitTest>();//删除单条数据_db.Delete(_newData);//删除多条数据_db.Delete(_insertList);//删除指定数据_db.Delete<Base_UnitTest>(x => x.UserId == "Admin2");//更新单条数据_db.Update(_newData);//更新多条数据_db.Update(_insertList);//更新单条数据指定属性_db.UpdateAny(_newData, new List<string> { "UserName", "Age" });//更新多条数据指定属性_db.UpdateAny(_insertList, new List<string> { "UserName", "Age" });//更新指定条件数据_db.UpdateWhere<Base_UnitTest>(x => x.UserId == "Admin", x =>{    x.UserId = "Admin2";});//GetList获取表的所有数据var list=_db.GetList<Base_UnitTest>();//GetIQPagination获取分页后的数据var list=_db.GetIShardingQueryable<Base_UnitTest>().GetPagination(pagination);//Maxvar max=_db.GetIShardingQueryable<Base_UnitTest>().Max(x => x.Age);//Minvar min=_db.GetIShardingQueryable<Base_UnitTest>().Min(x => x.Age);//Averagevar min=_db.GetIShardingQueryable<Base_UnitTest>().Average(x => x.Age);//Countvar min=_db.GetIShardingQueryable<Base_UnitTest>().Count();//事务,使用方式与普通事务一致using (var transaction = _db.BeginTransaction()){    _db.Insert(_newData);    var newData2 = _newData.DeepClone();    _db.Insert(newData2);    bool succcess = _db.EndTransaction().Success;}

上述操作中表面上是操作Base_UnitTest表,实际上却在按照一定规则使用Base_UnitTest_0~2三张表,使分片对业务操作透明,极大提高开发效率 具体使用方式请参考单元测试源码: "\src\Treca.UnitTests\DataRepository\ShardingTest.cs"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、Microsoft.Bussines.CommonProxy.dll 框架核心API库 包括:常用加密解密,缓存集群,IP地址库,Html Parse,金额转换,GoogleMap Api,Google PR,ImageMagick(图片处理),SharpZipLib压缩解压缩,中文分词核心库 2、WebSystem.Framework.dll 框架核心API库 包括:与Discuz相关的集成登陆,Evaluator计算表达式,Excel相关处理,Pdf处理,Msmq消息队列处理,ThreadPool(线程池,用于并发处理) 3、FrameWork.Extension.Toolkit.dll 针对DotNet基类扩展方法核心库 4、WebSystem.Framework.DAO.dll 数据访问层核心库:包括 DbHelperSQL,MySqlDbHelper,AccessDbHelper,实体层,数据库连接池 等 5、WebSystem.WebControls.dll 常用服务器控件核心库 主要提供后台开发使用 6、Business.Processing.dll 业务处理核心类库(定义前后台业务处理基类,支付,手机短信,序列号,用户等级,查询中心,报表处理中心等) 2.0新增加了 1、WebSystem.FrameWork.SearchEngine.dll 搜索引擎核心处理类库(提供并行中文分词、分布式并行采集器) 增加集成了中科院中文分词和盘古中文分词,并进行了并行改进,大大提高了分词性能 2、另外WebSystem.WebControls.dll 中新增加了100多个各类AJAX控件,另外集成并改写了全套extjs库,同时提供了一个WEB ERP的DEMO 3、另外在WebSystem.Framework.DAO.dll 数据访问层核心库,中增加了对Oracle、Sqlite、的处理功能,对所有的数据访问层的CRUD均增加了相关的 XML处理功能 也就是说所有的CRUD操作只要提供对应的实体和对应的XML数据即可 比如: /// <summary> /// 通过入Object的主键做为删除 主键为keys 的xml数据,删除后在重新插入xml中的数据 /// </summary> /// <param name="o">实体对象</param> /// <param name="xml">xml数据</param> /// <param name="keys">主键列表</param> /// <returns></returns> public List<string> GetDeleteAndInsertXmlSql(Object o, string xml, List<string> keys) 4、增加集成了盘古中文分词 更多范例请参考 http://hi.baidu.com/earthsearch 注:使用范例时:请先引用所有的DLL类库 有任何疑问请与我本人联系 QQ 99923309 QQ群:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值