abp框架

ABP框架迁移到Mysql

試著忘記壹切 提交于 2020-02-27 20:14:45
ABP框架 .NetCore3.x版本 1.首先找到xxx.Core 项目,添加引用Microsoft.EntityFrameworkCore.Tools 2.找到xxx.EntityFrameworkCore项目,将原有sqlserver的引用改为mysql引用 3. 找到Host项目中的配置文件,将连接字符串改为Mysql的连接字符串 4.找到xxx.EntityFrameworkCore项目中的xxxDbContextConfigurer文件, 将源文件按一下方式修改: public static void Configure(DbContextOptionsBuilder<VisualizationYunweiDbContext> builder, string connectionString) { //builder.UseSqlServer(connectionString); builder.UseMySql(connectionString); } public static void Configure(DbContextOptionsBuilder<VisualizationYunweiDbContext> builder, DbConnection connection) { //builder.UseSqlServer(connection);

abp vNext微服务框架分析

偶尔善良 提交于 2019-12-04 11:08:41
abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究。我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.net人员来说几乎是看不懂的,所以研究一番后再这里做一些简单的分析便于新手能够快速理解并使用。 难点 在开始分析前先介绍下该框架中的难点,没有微服务开发经验的可能要对以下难点进行研究。 难点一 :identity server4身份验证框架,该框架是根据.net core identity身份机制扩展的框架,vNext微服务中身份验证服务就是基于该框架。官方文档: http://docs.identityserver.io/en/latest/ 难点二 :ocelot网关框架,vNext中使用该框架提供统一的网关地址,vNext中给网关进行了分类,分为内部网关、后台管理网关、公共网关,这些网关分别代理了下游不同的微服务。官方文档: https://ocelot.readthedocs.io/en/latest/ 难点三 :docker容器化管理,微服务开发中普遍应用到了容器化技术,基于该技术可实现快速构建和部署,大大提高微服务团队协作效率,如果要选型微服务技术,该项难点必须攻克。 难点总结 以上列举了vNext中重要的难点,其中identity server4身份服务是框架中最为重要的

ABP源码编译及部署

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-03 23:56:17
前提: 本文使用的源码是 abp 5.x 多页面框架版 1、解压后,重新编译整个项目 2、在本地新建你webconfig中默认数据库的名字 3、把项目跑起来,此时可能会报错:VS运行项目时出现未能找到路径“……\bin\roslyn\csc.exe” 解决方法:NuGet程序包里引用Microsoft.CodeDom.Providers.DotNetCompilerPlatform和Microsoft.Net.Compilers程序集,然后重新编译,一般自动会在bin文件夹里生成roslyn文件夹 4、继续重新跑,此时提示 No language defined! 解决方法:查看对应数据库中表[AbpLanguages]是否有数据,如果没有执行以下步骤 a、检查是否已创建数据库,若未创建则在程序包管理控制台执行命令:Update-Database b、检查表AbpLanguages中是否有数据,若没有数据则在程序包管理控制台,选择EntityFramework项目并执行命令:Update-Database 5、在EntityFramework下执行Update-Database时,可能有新的报错提示信息:无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 6、其实前面从第4步开始,基本方向都错了,5.x 版本中有个单独Tools文件夹

[Abp 源码分析]七、仓储与 Entity Framework Core

匿名 (未验证) 提交于 2019-12-02 22:10:10
Abp 框架在其内部实现了仓储模式,并且支持 EF Core 与 Dapper 来进行数据库连接与管理,你可以很方便地通过注入仓储来操作你的数据。 例如: public class TestAppService : ITransientDependency { private readonly IRepository<TestTable> _rep; public TestAppService(IRepository<TestTable> rep) { _rep = rep; } public void TestMethod() { // 插入一条新数据 _rep.Insert(new TestTable{ Name = "TestName" }); } } 在 Abp 内部,仓储的基本定义存放在 Abp 项目的 Domain/Repositories 内部,包括以下几个文件: 文件名称 作用描述 AbpRepositoryBase.cs 仓储基类 AutoRepositoryTypesAttribute.cs 自动构建仓储,用于实体标记 IRepository.cs 仓储基本接口定义 IRepositoryOfTEntity.cs 仓储接口定义,默认主键为 int 类型 IRepositoryOfTEntityAndTPrimaryKey.cs 仓储接口定义

使用ABP框架踩过的坑系列3

匿名 (未验证) 提交于 2019-12-02 22:10:10
从架构角度来讲,ApplicationService究竟应该如何定位,一种说法是直接对应用例UseCase, 也就是直接对应UI, 这个UI是广义的,不仅仅是浏览器的页面,也包括API调用。还是从我曾经踩过的一个坑说起吧: public class ProductImportService : AdvancedAsyncCrudAppService<Product, ProductDto, PagedResultRequestDto> , IProductImportService { ......public ProductImportService(...... ) : base(productRepository) { ...... } //[MyIgnoreApiAttribute] //[DisableValidation] //[DisableAuditing] private void SaveProductAndTestSizeHead( RawData rawData ) { ...... } //[DisableValidation] //[DisableAuditing] private void SaveStandardSizeValue( RawData rawData) { ...... } //[DisableValidation] //

[Abp 源码分析]十二、多租户体系与权限验证

匿名 (未验证) 提交于 2019-12-02 22:06:11
承接上篇文章我们会在这篇文章详细解说一下 Abp 是如何结合 IPermissionChecker 与 IFeatureChecker 来实现一个完整的多租户系统的权限校验的。 多租户系统又被称之为 Saas ,比如阿里云就是一个典型的多租户系统,用户本身就是一个租户,可以在上面购买自己的 ECS 实例,并且自己的数据与其他使用者(租户)所隔绝,两者的数据都是不可见的。 那么 Abp 是如何实现数据隔离的呢? 如果你的软件系统仅部署一个实例,并且所有租户的数据都是存放在一个数据库里面的,那么可以通过一个 TenantId (租户 Id) 来进行数据隔离。那么当我们执行 SELECT 操作的时候就会附加上当前登录用户租户 Id 作为过滤条件,那么查出来的数据也仅仅是当前租户的数据,而不会查询到其他租户的数据。 Abp 还提供了另外一种方式,即为每一个租户提供一个单独的数据库,在用户登录的时候根据用户对应的租户 ID,从一个数据库连接映射表获取到当前租户对应的数据库连接字符串,并且在查询数据与写入数据的时候,不同租户操作的数据库是不一样的。 从上一篇文章我们知道了在权限过滤器与权限拦截器当中,最终会使用 IFeatureChecker 与 IPermissionChecker 来进行权限校验,并且它还持久一个用户会话状态 IAbpSession 用于存储识别当前访问网站的用户是谁。

ABP理论学习之工作单元(Unit of Work)

痴心易碎 提交于 2019-11-29 12:44:22
返回总目录 本篇目录 公共连接和事务管理方法 ABP中的连接和事务管理 仓储类 应用服务 工作单元 工作单元详解 关闭工作单元 非事务的工作单元 工作单元方法调用其它 工作单元作用域 自动保存 IRepository.GetAll()方法 UnitOfWork特性的限制 选项 方法 事件 公共连接和事务管理方法 在使用了数据库的应用中,连接和事务管理是最重要的概念之一。何时打开一个连接,何时开始一个事务,如何释放连接等等。 你可能已经知道,Net使用了连接池。因此,创建一个连接实际上是从连接池中获取一个连接,因为因为创建一个连接是有消耗的。如果在连接池中没有可用的连接,那么会创建一个新的连接,并将该连接加入连接池。当你释放连接时,实际上是将该连接发送回给连接池,并没有完全释放。这种机制是.Net提供的立即可用的功能。因此,在我们使用完一个连接后应该立即释放,在需要的时候才创建一个新的连接。总之,最佳实践记住这八个字足矣: 尽晚打开,尽早释放 。 这里我推荐一篇关于数据库连接的文章,写得很浅显易懂: 《细说数据库连接》 在一个应用中创建或者释放一个数据库连接,通常有2种方法。 第一种方法 :当Web请求开始(在Global.asax的Application_BeginRequest事件中)的时候创建一个连接,在所有的数据库操作时使用相同的连接,并且在请求结束(Application

ABP中的AutoMapper

陌路散爱 提交于 2019-11-29 00:19:32
  在我们的业务中经常需要使用到类型之间的映射,特别是在和前端页面进行交互的时候,我们需要定义各种类型的Dto,并且需要需要这些Dto和数据库中的实体进行映射,对于有些大对象而言,需要赋值太多的属性,这样往往会使整个代码不够简洁和明了,有了AutoMapper之后我们就可以通过很少的代码来完成这样一个映射的过程,在了解当前的代码之前,你最好先读一下 ABP文档 中对于这个部分的介绍。    一 用法   1 注入IObjectMapper接口   通过接口注入IObjectMapper对象,如果使用ABP框架的话所有继承自ApplicationService的应用服务都可以获取定义于AbpServiceBase中已经注入的公用属性ObjectMapper对象。   2 定义映射关系   在当前继承自AbpModule的类下面的Initialize()方法中添加映射关系 public override void Initialize() { IocManager.RegisterAssemblyByConvention(typeof(DcsApplicationModule).GetAssembly()); IocManager.AddSdtSession<Guid>(); Configuration.Modules.AbpAutoMapper().Configurators.Add

ABP文档 - 目录

荒凉一梦 提交于 2019-11-28 17:53:19
ABP框架 概览 介绍 多层结构 模块系统 启动配置 多租户 集成OWIN 共同结构 依赖注入 会话 缓存 日志 设置管理 时间 对象之间的映射(集成AutoMapper) (新) 发送邮件(集成 MailKit) (新) 领域层 实体 值对象 仓储 领域服务 规约 工作单元 领域事件(EventBus) 数据过滤 应用层 应用服务 数据传输对象 验证数据传输对象 授权 功能管理 审计日志 分布服务层 Asp.net Web Api Web Api 控制器 动态 Web Api 层 OData 集成 Swagger UI 集成 展现层 Asp.net Mvc Mvc 控制器 Mvc 视图 处理异常 嵌入资源文件 Asp.net Core Asp.net Core 集成(暂略) 本地化 导航 嵌入资源 Javascript Api CSRF/XSRF 保护 后台服务 后台作业和工作者 Hangfire 集成 Quartz 集成 实时服务 通知系统 SignalR 集成 ORM EntityFramework 集成 EntityFramework Core 集成(暂略) NHibernate 集成(暂略) 发布 Nuget 包 修改日志和发布 来源: http://www.cnblogs.com/kid1412/p/AbpDocumentContent.html