급속한 발전 .NET 코어 프레임 워크는 전방 및 후방 단부 (Core.3.0 + AntdVue) 구분

급속한 발전 .NET 코어 프레임 워크는 전방 및 후방 단부 (Core.3.0 + AntdVue) 구분

디렉토리

소개

시간 정말 빨리 다시 눈 깜짝 올해. 리콜은 오픈 소스 이어 올해 발표 것을 Colder.Fx.Net.AdminLTE (254Star) , Colder.Fx.Core.AdminLTE (335Star) , DotNettySocket (82Star) , IdHelper (47Star를) 이러한 프레임 워크 및 구성 요소 현실과 일치하며, 실용적인 태도, (자신이 첫 번째 사용자입니다) 지금 좋은 반응을 개발 효율성을 개선하기 위해 노력합니다. 그러나 일정 전면의 변화와 백 엔드 기술, 특히 프론트 엔드로, 현재의 환경이 전면 가지고 있으며, 후단이 환경과 피할 수없는 추세에 따라, 완전히 분리 된 기반 개발 모델이며, 기존의 MVC는 시간 뒤에 조금 보이는 . 이 맥락에서, 전방 및 .NET 개발기구의 분리의 후단 타겟 업그레이드 워크 설정하는 것이 특히 필요하다 전면 및 분리기의 후방 단부 .

먼저 현재의 데이터에서, .NET 핵심 개발은 .NET 프레임 워크보다 훨씬 빠른, 백엔드 기술을 선택, 가장 간단한 분석 Colder.Fx.Core.AdminLTE이 Colder.Fx.Net.AdminLTE 이후에 출시하고, 하지만 분석 포인트와 얼굴이 열정과 긍정적 인 태도, 어떤 사람들은 생각을 배울 수있는 .NET 개발자의 많은 수에서 볼 수있는, 별은 뒤에 이전의 30 % 이상에서 왔는가,이 격차는 증가하고있다 그래서 참을 수없는 ( 다른 사람이 말할 수 있습니다 무엇이든 자신의 길을 갈 ). 환경에 적극적으로하는 .NET 핵심을 개발하기 위해, 마이크로 소프트의 오픈 소스를 포용, 미래가 밝은이라고 할 수 있습니다. 따라서 백엔드는 사용하기로 결정 닷넷 Core3.0을 닷넷 프레임 워크를 지원하기 위해 에너지를 낭비하지.

그런 다음, 선호하는 선택이 프런트 엔드 기술 선택 세 JS 프레임 워크입니다,하지만 현실에서 진행 뷰를 더 쉽게 사용할 수 기타 조건을 기준으로하고, 더 적은 기능과 같은 크고 작은 기업의 다양한 원, 결함 말을 선택하는 경우, 즉 TS를 지원하지 않지만 곧 박리 Vue3.0 확실히이 결함을 변경. 뷰를 선택한 후, 및 UI 프레임 워크는 여기에 더 많은 옵션을 선택, 내가 개미 디자인 뷰를 선택하고, 그 이유는 내 디자인과 매우 일치, 간단하고 편리하다.

나는 접시 비교 프런트 엔드, 처음 Vue2.x 가족 버킷에서 시작하는 것이 필요하기 때문에 기술 선택의 완료 후 기대 이내에, 지금 경험이 거의 3 개월 처음부터 연구 개발로 이동합니다. 사실, 학습이 전면 및 예방 접종 기록을 재생 후 단부 개발 경험을 분리하는 내 동생되지 않도록 사용에 프런트 엔드 Vue2.x 가족 버킷, 그것은 아주 사용하기 쉬운, 어려운 일이 아니다, 퇴각, 상향 이동하지, 학습 끝없는.

일부는 너무 BBB는 직접 아래의 주소에, 잔소리, 더 직접적으로 무례 동생이있을 수 있습니다
: 코드 (GitHub의) https://github.com/Coldairarrow/Colder.Admin.AntdVue
문서 (GitHub의) : HTTPS : // GitHub의. COM / Coldairarrow / Colder.Admin.AntdVue / 위키
코드 (코드 클라우드 이미지) : https://gitee.com/Coldairarrow/Colder.Admin.AntdVue
문서 (코드 클라우드 이미지) : https://gitee.com/Coldairarrow/ Colder.Admin.AntdVue는 / 위키
온라인 미리보기 주소 : http://coldairarrow.gitee.io/coler.antdvue.preview/#/Home/Introduce
서버가 알리 클라우드 서버 (86), 1M 약간의 물의 대역폭 때문에, 프런트 엔드 배포 그래서 클라우드에 대한 코드 및 감사 싶습니다 코드 클라우드 백엔드 클라우드 알리 (86) 서버 CentOS7에 배치했다. 사용하여 전체 기술 스택 의 .NET 코어 디자인 개미 + + PostggreSQL 뷰 + CentOS7의 Nginx + + + Dokcer 젠킨스 , 자동화 된 원 스톱, 오픈 소스와 자유 고성능, 높은 휴대 성, 높은 확장의 급속한 발전에서 배포 방광의 손실을 ( 중소기업 벤처 선택 + 개별 주문 무기 )

간략한 소개

이 프레임 워크 .NET Core3.0 + 개미 디자인 뷰 판

이 프레임 워크는 크게 개발 효율성을 향상시키기 위해 설계되었습니다

사용 기술 스택 :
백엔드 : 닷넷 핵심 플랫폼, ASP.NET Core3.0, C # 언어, 엔티티 FrameworkCore (데이터베이스 ORM 프레임 워크) (반사 및 기타 기술 수석를 사용).
분산 트랜잭션 처리 (크로스 라이브러리)의 데이터 저장 패턴, 추상 데이터베이스 작업 (CRUD 등), 트랜잭션 처리 및 지원 사용
지원 데이터베이스를 별도의 읽기 및 쓰기, 및 하위 서브 테이블 데이터베이스 트랜잭션을 (단지 여러 시트를 지원하지 않는 단일 테이블 작업을 지원) IOC 컨테이너 지향 프로그래밍 인터페이스와 Autofac의 전체 사용, 전체 디커플링이
작업을 확장 할 수있는 도구 및 라이브러리의 다양한 통합
데이터베이스 : 지원 SQLSERVER, PostgreSQL을, MySQL은, 오라클 (프레임 워크는 간단한 공장을 사용하고, 팩토리 메소드 추상적 인 공장, 쉽게 데이터베이스를 대체 할 수있다) 분산 캐시로 레디 스
프런트 엔드 : Vue2.x 가족 버킷 + 개미 디자인 뷰, 공통 구성 요소를 통합, 프로젝트 개발을 촉진하기 위해 노력하고 있습니다.

특정한 기술적 구현 :
프로젝트 용도 완전히 크게 중합도 저감 결합 증가 전후 단부 모드 엄격한 계층 모델 분리
향상된 코드 견고성을 유지 보수성.
전에 클라이언트는 JWT, 데이터 인터페이스를 통해 운영 데이터, 데이터 형식으로 JSON의 통합을 사용하여 인증 및 안전을 보장하기 위해 기본 인터페이스 인터페이스 서명 알고리즘을 사용 후.

기능 아키텍처 제품 상세 :
신속한 개발 :이 기능은 데이터베이스 테이블을 선택하여 핵심 프레임 워크이며, 자동으로 물리 계층, 비즈니스 로직, 컨트롤러를 생성하려면, 뷰 파일이 기본을 생성하는 코드를 작성하지 않고, 첫 페이지에 해당하는 CRUD 작업.
인터페이스 키 관리 : 규칙에 서명하면 키 관리 인터페이스, 인터페이스는, 프론트 엔드 인터페이스가 제대로 백엔드 서명 인터페이스에 액세스 할 수 있어야합니다.
권한 관리 : 기본 RBAC 액세스 제어를 사용하여 지원하는 운영 권한, 권한 및 데이터 인터페이스 기관

주요 특징들 및 프레임의 특성을 다음과 같이

기능 자세한 설명
사용자 로그인 사용자 로그인, 암호 변경
사용자 관리 시스템 사용자 관리 시스템
각 색상 관리 (1) 역할 관리
부문 관리 부문 관리, 멀티 레벨 자연
권한 관리 사용 RBAC 권한 시스템, 역할 기반 권한 관리, 지원 권한 메뉴, 운영 기관 (버튼 기관), 인터페이스 인증, 데이터 인증
시스템 로그 자동으로 캡처, 멀티 레벨 기록 다채로운 콘솔, 파일, 데이터베이스, ElasticSearch 로깅, 글로벌 예외 프레임을 지원
신속한 개발 데이터베이스를 통해 직접적으로 물리 계층, 비즈니스 로직, 및 컨트롤러 레이어 뷰 프론트 페이지 코드를 생성 CURD 코딩없이 달성 될 수있다
데이터베이스 작업 패키지 EF 모델 일반적으로 사용 CURD 포장 기반 스토리지는 하나의 분산 데이터베이스 사물과 사물을 지원합니다
다중 데이터베이스 지원 EF 기반 스토리지 모델은 주요 주류 관계형 데이터베이스를 지원하는 (SQLServer에, MySQL은, PostgreSQL을, 오라클)
슈퍼 휴대 추상 공장 데이터베이스 캡슐화 층 운영, 전환 데이터베이스 0 코드 변경
지원 소프트 삭제 키 스위치 삭제 모드, 비즈니스 운영 투명에게 부드러운 삭제 물리적 지원을 삭제
캐시 지원 지원 시스템은 사용하기 쉬운 레디 스 캐시와 캐시 패키지 사용자 인터페이스를 제공
완전히 분리 된 전방 및 후방 단부 사용 Vue2.x 가족 배럴 말초 + 개미 디자인 뷰, 인터페이스 단순하고 아름다운, 컴포넌트 기반 개발
통합 JWT 검증 ,, 쿠키 올리버 제거 인증 프레임 워크로 JWT의 사용을 확장 할 압력을 분산하지
외부 인터페이스 서명 알고리즘의 통합 외부 인터페이스의 프레임 워크는 시스템의 보안을 보호하기 위해 매우 엄격한 서명 검증 (부인 방지, 위조 방지, 안티 반복 호출)를 설정할 수 있습니다
응답 페이지 전면은 iframe을하지 않고, 주요 주류 브라우저 지원 친절한 단일 페이지 응용 프로그램입니다
확장 다른 도움이 라이브러리와 플러그인 다양한

관련 버전은 다음 표를 참조하십시오

.NET 버전 프런트 엔드 UI 주소
Core3.0 개미 디자인보기 https://github.com/Coldairarrow/Colder.Admin.AntdVue
Core2.2 AdminLTE https://github.com/Coldairarrow/Colder.Fx.Core.AdminLTE
.NET4.72 AdminLTE https://github.com/Coldairarrow/Colder.Fx.Net.AdminLTE
.NET4.52 Easyui https://github.com/Coldairarrow/Coldairarrow.Fx.Net.Easyui.GitHub
Core2.1 Easyui https://github.com/Coldairarrow/Coldairarrow.Fx.Core.Easyui.GitHub
.NET4.0 Easyui https://github.com/Coldairarrow/Coldairarrow.Fx.Net40.Easyui.GitHub

배경 효과는 아래에 도시된다 :
MG22Bd.png

빌드 환경

개발 환경 :

운영 체제 : Windows 10
백엔드 개발 툴 : 비주얼 스튜디오 2019+
프런트 엔드 개발 도구 : Visual Studio를 코드, 설치 nodejs , 원사
SDK : .NET 핵심 SKD 3.0 이상 설치
SQLServer2008 R2 이상 : 데이터베이스를

기본 데이터베이스의 건축 :

  • 데이터베이스 작성
    에 필요한 데이터베이스 정보 디렉토리 "/ 문서 / 초기화 파일을"
    MGo70U.png
    수동으로 데이터베이스를 생성하고, 다음에 해당하는 SQL 스크립트를 실행

  • 연결 문자열 구성
    아래와 같이 공개 Colder.Admin.AntdVue 솔루션 src 디렉토리를

MGTuB8.png

(자신의 데이터베이스 연결 문자열 바이 튜토리얼을 검색 취소하지 않은 경우) 데이터베이스를 만들 수 위의 ConnectionString을 수정없이 순차적으로 05.Coldairarrow.Api / appsettings.json, 구성 데이터베이스 연결 문자열, 이름을 확장에 도시 된 바와 같이

데이터베이스 설계 사양

由于本框架支持自动生成代码的核心功能,此功能是根据数据库的表结构来生成代码的
因此规定每张表都有一个主键,列名为Id,类型为字符串,实际添加数据时默认使用SnowflakeId(雪花Id,Twitter设计的分布式趋势自增Id,若不清楚请自行百度相关资料),表中的每个列都需要有描述信息(建议这样操作,若不按照这个标准则需要一些额外的改动才能够成功运行)。每张表都需要Id、CreateTime、CreatorId、CreatorRealName这几个必带字段

MG7p2n.png

运行

后端:打开解决方案=>还原nuget包=>配置数据库=>运行(05.Coldairarrow.Web设为启动项目)
后台成功运行后会自动打开swagger
MGHcTO.png
前端: 确保已安装nodejsyarn
用VS Code 打开文件夹src\Coldairarrow.Web
MGHEOP.png
输入命令:yarn
输入命令:yarn run serve
成功运行后即可打开登录页面
MGH56I.png
输入账号:Admin,密码:123456进入后台主页
MG22Bd.png

使用教程

全局配置

在01.Coldairarrow.Util中的GlobalSwitch类中,设置了各个参数,其中RunModelDatabaseType需要重点关注一下,其它参数请看注释。

快速开发

此功能为本框架的核心功能,能够自动生产完整的可运行代码,具体使用如下:

  • 配置数据源

首选需要有数据库源,因为代码生成是根据数据库表来生成的。
菜单:开发=>数据库连接
MYpg8P.png
若列表中没有目标数据源,则添加数据库连接
MYphDg.png
数据连接名、连接字符串、数据库类型即可。添加完成后即可看到连接字符串信息。

  • 生成代码

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

MYpb80.png

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

MYi3M6.png

生成选项中可以选择需要生成的类型,默认生成全部:实体层、业务层、接口层(即控制器)和页面(Vue前端页面代码)。
生成区域请输入业务模块名(例如系统叫Base_Manage),请按具体业务填入(必填)
这里示例填写TestManage,点击生成按钮,即可完成代码生成。生成后的代码在项目解决方案中,将代码文件包括进入项目

默认生成后的文件会被自动包括到解决方案中,若没有则需要点击显示所有文件按钮,即可看到生成后的新文件

生成的实体层、业务逻辑层、控制器层代码:
MYiWJs.png
MYFAfA.png
前端生成的代码:
MYiXWR.png

后端代码添加后需要重新编译下(F7),编译后好可以看到有新的接口
MYQYcD.png
前端生成代码后会自动保存并编译(别的文件修改保存也会自动编译,毕竟编译一次挺慢的),不放心可以Ctrl+C停止,然后再yarn run serve重新运行

代码生成完毕,但是要展示到菜单上需要进行配置,并且所有业务菜单都是动态的(权限控制)
打开菜单:系统管理=>权限管理=>新建
MYPsUJ.png
MYFUmT.png
菜单名:即需要显示的菜单名
上级菜单:菜单是多级树状的,可以放在某个菜单下面
类型:可以选择菜单或页面,这里是具体的页面,所以选页面
路径:页面的路径,菜单可以不配置,这里配置为/TestManage/Base_BuildTest/List,这里设置规则为:views文件夹为根路径(即"/"),向下展开依次为/TestManage/Base_BuildTest/List,最后真正的列表页为List.vue文件,表单页为EditForm.vue文件
是否需要权限:若为“否”,则此页面不限制权限,即所有人都能看
图标:菜单显示图标,具体到开发=>图标选择页进行选择
排序:若需要需要对菜单进行排序则设置,默认0,类型为int
页面权限:页面拥有的权限(权限值唯一,作为操作权限即接口权限的依据),详见权限管理

确认保存,然后刷新整个页面(F5),即可看到全新生成的菜单“生成测试”
MYkvqK.png
MYAFxI.png
MYAVqf.png

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

管理员登录

MGH56I.png
默认超级管理员账号为:Admin
密码为:123456

系统用户管理

管理系统登录的用户
菜单:系统=>用户管理
点击右侧设置权限

系统角色管理

管理系统角色,角色是权限的载体,合理分配角色有利于权限管理
菜单:系统=>角色管理
操作中可以设置角色的权限,详情见 <权限管理> 模块

权限管理

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

首先,权限分为两种,即操作权限数据权限,其中操作权限主要包括菜单权限和按钮权限,在角色编辑表单中,给角色勾选需要的权限即可,用户可以分配多个角色,继承所有角色的权限。
MYET39.png
如上图,按需勾选,有人会疑问为什么只有增、改和删的权限而没有查的权限,其实这里考虑到了当勾选“用户管理”时,就已经默认拥有“查”的权限了,这里再设置“查”权限岂不是多此一举,可以根据实际业务需求添加诸如申请、审核等权限,灵活应用。
这里的树状是和菜单一一对应的,勾选哪些菜单就拥有哪些菜单

下面介绍下最常用的按钮权限
MYVTIS.png

如上图,在需要控制权限的按钮使用v-if="hasPerm('Base_User.Add')",表示只有当用户拥有权限值Base_User.Add才显示此按钮,权限值就是权限表单中配置的权限值

这里的按钮级权限控制只能够在前端控制操作入口,若系统对安全性要求较高,则需要控制接口权限
MYZNo8.png

如上图,在需要权限控制的接口加上ApiPermission特性即可,参数也为权限值,只有拥有此权限才能访问此接口

数据权限比较复杂,若采用纯SQL方式,那么会更加复杂,本框架全程采用EF作为ORM框架,通过对IQueryable< T >进行过滤,即可完成数据权限控制,详细使用方式见用户管理

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

接口秘钥管理

作为对外接口签名的AppId和AppSecret管理
菜单:系统=>接口秘钥管理

系统日志

菜单:系统=>系统日志

单库事务

使用方式如下:

BaseBusiness<Base_UnitTest> _baseBus  = new BaseBusiness<Base_UnitTest>();
/*RunTransaction传入执行具体数据库操作的Action,操作中若出现异常会自动回滚事务,业务只需根据返回的transActionRes进行处理,返回类型为元组(bool Success, Exception ex),Success表示事务是否成功,ex为事务失败异常信息*/
var transActionRes = _baseBus.RunTransaction(() =>
{
    var newData = _newData.DeepClone();
    newData.Id = Guid.NewGuid().ToString();
    newData.UserId = IdHelper.GetId();
    newData.UserName = IdHelper.GetId();
    _baseBus.Insert(_newData);
    _baseBus.Insert(newData);
});

跨库事务

使用方式如下:

//第一个数据库
IRepository _bus1 = DbFactory.GetRepository();
//另一个数据库
IRepository _bus2 = DbFactory.GetRepository("BaseDb_Test");
_bus1.DeleteAll<Base_UnitTest>();
_bus2.DeleteAll<Base_UnitTest>();
Base_UnitTest data1 = new Base_UnitTest
{
    Id = Guid.NewGuid().ToString(),
    UserId = "1",
    UserName = Guid.NewGuid().ToString()
};
Base_UnitTest data2 = new Base_UnitTest
{
    Id = data1.Id,
    UserId = "1",
    UserName = Guid.NewGuid().ToString()
};
Base_UnitTest data3 = new Base_UnitTest
{
    Id = Guid.NewGuid().ToString(),
    UserId = "2",
    UserName = Guid.NewGuid().ToString()
};

new Action(() =>
{
    //创建并执行事务,使用方式与单库一致
    var succcess = DistributedTransactionFactory.GetDistributedTransaction(_bus1, _bus2)
        .RunTransaction(() =>
        {
            _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') ");
            _bus1.Insert(data1);
            _bus1.Insert(data2);
            _bus2.Insert(data1);
            _bus2.Insert(data3);
        });
    Assert.AreEqual(succcess.Success, false);
    Assert.AreEqual(_bus1.GetIQueryable<Base_UnitTest>().Count(), 0);
    Assert.AreEqual(_bus2.GetIQueryable<Base_UnitTest>().Count(), 0);
})();

读写分离分库分表

本框架支持数据库读写分离分库分表(即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作为主键被各种嫌弃,这次看你们怎么说)

  • 使用方式
    配置完成,下面开始使用,使用方式非常简单,与平常使用基本一致
    首先获取分片仓储接口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);
//Max
var max=_db.GetIShardingQueryable<Base_UnitTest>().Max(x => x.Age);
//Min
var min=_db.GetIShardingQueryable<Base_UnitTest>().Min(x => x.Age);
//Average
var min=_db.GetIShardingQueryable<Base_UnitTest>().Average(x => x.Age);
//Count
var min=_db.GetIShardingQueryable<Base_UnitTest>().Count();
//事务,使用方式与普通事务一致
bool succcess = _db.RunTransaction(() =>
{
    _db.Insert(_newData);
    var newData2 = _newData.DeepClone();
    _db.Insert(newData2);
}).Success;
Assert.AreEqual(succcess, false);

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

常见疑问

如何进行联表查询

框架使用EF+LINQ进行联表操作,核心在于对IQueryable< T >的使用,另可网上搜EF+LINQ的相关教程。

示例如下:
Base_User表左连接Base_Department表获取DepartmentName属性

//定义数据模型类
public class Base_UserTestDTO : Base_User
{
    public string DepartmentName { get; set; }
}

//即BaseBusiness中的Service
var db = DbFactory.GetRepository();
Expression<Func<Base_User, Base_Department, Base_UserTestDTO>> select = (a, b) => new Base_UserTestDTO
{
    DepartmentName = b.Name
};
select = select.BuildExtendSelectExpre();
var q = from a in db.GetIQueryable<Base_User>().AsExpandable()
        join b in db.GetIQueryable<Base_Department>() on a.DepartmentId equals b.Id into ab
        from b in ab.DefaultIfEmpty()
        select @select.Invoke(a, b);
//筛选
var where = LinqHelper.True<Base_UserTestDTO>();
where = where.And(x => x.UserName == "Admin");

//筛选并获取分页数据
var list = q.Where(where).GetPagination(new Pagination()).ToList();

源码可参考Base_UserBusiness.GetDataList

如何切换数据库类型

在01.Coldairarrow.Util项目中的GlobalSwitch,将DatabaseType改为需要的即可,对应的数据库连接字符串当然也要改为对应数据库的
MYK1bR.png

如何使用多个数据库

자신의 해당 생성자를 다시 작성해야하며 데이터베이스 연결 문자열이 추가되었는지 확인하기 위해 필요에 따라 특정 BaseBusiness 비즈니스 클래스의 부모 클래스의 생성자를 재정의하려면

MYMFzD.png

MYMVLd.png

여러 데이터베이스를 사용할 필요가, 또는 다중 스레드 데이터베이스 작업을해야하는 경우에는 사용할 필요가
MYMsOJ.png

발문

그것보다, 당신의 마음을 좋은 느낌 경우,이 프레임 워크에 오신 것을 환영합니다

Github에서이 별을 환영합니다 : https://github.com/Coldairarrow

포인트 파크 찬 블로그에 오신 것을 환영합니다 : https://www.cnblogs.com/coldairarrow/

QQ 그룹 2 : 579 (202) 910
개인 QQ : 862520575이 ( .NET 코어 + 리눅스 + Nginx에 + 젠킨스 제공, 기술 지원 및 사업 협력을 환영 + 자식 통합 연속 신속한 개발 플랫폼의 패키지 )

그것은 당신에게 도움을 기대하고, 지속적인 개선 및 유지 보수를위한 신속한 개발 프레임 워크가 될 것입니다

질문이 있거나 기술 지원이 필요한 경우, 저에게 연락 주시기 바랍니다.

학습이 결코 캡 기술을 끝없는 ------ 코드는 ------ 예술이다

추천

출처www.cnblogs.com/coldairarrow/p/11870993.html