一.问题 新项目是基于 ABP vNext 框架进行开发的,所以我要求为每层编写单元测试.在同事为某个仓储编写单元测试的时候,发现了一个奇怪的问题.他的对某个聚合根的 A 字段进行了更新,随后对某个导航属性 B 也进行了变更,最后通过仓储提供的 UpdateAsync() 方法对变更的数据进行持久化. 结果再次查出来的时候,发现聚合根的 A 字段倒是更新了,但是导航属性 B 的内部字段没有进行变更.例如在下面的实例当中,聚合根的 Name 字段变更成功,但是导航属性的 Street 字段变更失败…
ABP vNext 使用 logdashboard 本文示例源码:https://github.com/liangshiw/LogDashboard/tree/master/samples/abpvnext ABP ABP是aspnetcore3.0的开源web应用程序框架,非常适合现代web应用程序.有关ABP的更多内容可以查看官方文档 Logdashboard可以直接在基于abp应用程序中安装使用,关于Logdashboard的更多内容可以查看ASPNETCore开源日志面板 :LogDas…
一.简要介绍 ABP vNext 框架本身就是围绕着 DDD 理念进行设计的,所以在 DDD 里面我们能够见到的实体.仓储.值对象.领域服务,ABP vNext 框架都为我们进行了实现,这些基础设施都存放在 Volo.Abp.Ddd.Domain 项目当中. 本篇文章将会侧重于理论讲解,但也只是一个抛砖引玉的作用,关于 DDD 相关的知识可以阅读 Eric Evans 所编写的 <领域驱动设计:软件核心复杂性应对之道>. PS: 该书也是目前我正在阅读的 DDD 理论书籍,因为基于 DDD 理…
尝试从零开始构建我的商城 (一) :使用Abp vNext快速搭建一个简单的项目 前言 GitHub地址 https://github.com/yingpanwang/MyShop 此文目的 本文将尝试使用Abp vNext 搭建一个商城系统并尽可能从业务,架构相关方向优化升级项目结构,并会将每次升级所涉及的模块及特性以blog的方式展示出来. 代码实践 Abp vNext 使用 DDD 领域驱动设计 是非常方便的,但是由于本人认为自身没有足够的功力玩转DDD,所以开发中使用的是基于贫血模型的设…
简介 服务通讯是微服务架构中必不可少的功能,服务通讯的效率决定了微服务架构的优略.常用的微服务通讯策略有两种,分别是rpc.http,其中rpc以gRpc框架为代表使用者最多.abp vNext微服务架构中当然也有服务通讯策略,采用的是http方式进行服务通讯. gRpc和http对比 虽然gRpc高效安全,但是相关的.net框架实在臃肿难用,这一缺陷在.net core3.X后可能会得到完美解决.abp vNext微服务架构出现在.net core3.0以前,所以选择了灵活方便的http进行服…
前几篇分别介绍了abp vNext微服务框架.开发环境搭建和vue element admin前端框架接入,在vue element admin中实现用户角色管理基本功能后就可以开始进行业务开发了,本篇会详细的介绍如何在abp vNext中开发业务接口和前端页面实现. 业务接口开发 业务接口就是针对业务api接口,通过abp vNext微服务中实现并发布业务接口后,前端获取接口并进行界面开发,如此就实现了abp vNext微服务的前后端分离开发. step1:创建实体(model) abp vN…
背景 我们在用EFCore框架操作数据库的时候,我们会遇到在 xxDbContext 中要写大量的上下文 DbSet<>; 那我们表少还可以接受,表多的时候每张表都要写一个DbSet, 大量的DbSet无异于是很蛋疼的一件事:而且看上去也很啰嗦,也不美观:至此我们就开始了下边的踩坑之旅: EFCore 如何实现动态DbSet 我们网上百度一下千篇一律大概都是一下这种方式来实现动态的 我们一般都是先定义实体 public class UserJob: IEntity { public Guid…
一.简要说明 ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包.这里与原来的 ABP 框架就不一样了,原来的 ABP 框架还需要抽象出来一个 IIocManager 用来管理整个 IoC 容器,现在则直接操作 IServiceCollection 与 IServiceProvider 进行组件的注册/解析. 这里需要注意的是,虽然现在的依赖注入服务是使用微软官方那一套库进行操作,但是 A…
在Abp vNext中,如果开启了多租户功能,在业务代码中默认使用当前租户的数据,如果我们需要更改当前租户,可以使用下面的方法 /* 此时当前租户 */ using (CurrentTenant.Change(tenantId)) { /* 此时为租户 tenantId */ } /* 此时为当前租户 */ 那上面这种在using中临时更改租户是怎样实现的呢,通过看源码然后自己整理了一下,简化版如下 /// <summary> /// 当Dispose方法被调用时 这个类可执行一个方法 ///…
简介 abp vNext中提供了多语言功能,默认语言是英文,没有提供中文语言包.在业务开发中,定义权限后需要用中文的备注提供角色选择,本篇将介绍如何在abp vNext中加入中文语言. step1:添加zh.json中文包 在Abp vNext微服务架构的modules/product/src/ProductManagement.Application.Contracts/ProductManagement/Localization/ApplicationContracts目录下添加zh.jso…