目录
介绍
说明
具体实现
1、扩展抽象实体
2、扩展非抽象实体
总结
介绍Abp现在是比较流行的一个.net的基于ddd思想的框架,所有很多公司也开始想要使用,并在招聘中会要求应聘者会abp框架。Abp框架默认设计好了一些常用的表架构,但是在实际的项目中必然会出现默认表的字段不满足需求,需要添加新字段的问题。本文将简单价绍如果向默认的表中添加字段。
说明
系统表分为两类,一类是定义为抽象类的,如AbpRoles、AbpUsers;而另一类是普通的类,如AbpOrganizationUnitRoles。具体就不一一说明,您可以根据需要扩展的表,到源码中查看即可。所有在向表中添加字段时,也就分为了两种方法。
具体实现 1、扩展抽象实体
这里我们以用户表为例。直接看代码,如下
在Core项目下的Authorization文件夹下找到User类,添加需要的字段即可。
接下来只需要在【程序包管理器控制台】下执行以下命令即可。
注意选择【默认项目】为EFCore的,另外就是,迁移文件的名字是自定义的。
如果迁移文件添加成功了,那么在执行update-database命令即可完成数据库更新。
现在我们来看看生成数据库表是否真的发生了变化。如下图
PS:如果需要修改原字段属性,通过override重写即可,这里就不多解释了。
2、扩展非抽象实体
这里我打算使用组织单元(AbpOrganizationUnitRoles)表来作说明(官方文档中是使用的AbpEditions)。
首先我们需要在Core项目下添加一个Organizations文件夹,这个非常重要,这一点也是很多类似博客中没有提到的,然后在此文件夹下添加一个自定义类MyOrganization。如下图
特别说明:至于为什么费用添加这个文件夹,因为原代码结构中OrganizationUnitRole类的定义就是在Organizations文件夹下的,这应该是abp框架默认的一个中约束。您也可以看看上一小节提到的用户表,其源代码中也是放在Authorization/Users文件夹下的。我们可以看看源代码中OrganizationUnitRole类的截图,如下
让我们继续下面的步骤。定义好自定类,并添加自定义的字段之后,和抽象实体扩展不同的是,我们需要先到EntityFrameworkCore项目下找到数据库上下文,并添加DbSet 属性,如下图
接下来就是添加迁移文件,在添加成功后,我们需要对其稍作调整,如下图
这也就可以在生成表的时候,把实体替换为我们自定义的类了。然后执行更新数据库命令,我们看看数据库表的生成情况,如下图
总结
这里我仅仅介绍了如果向abp框架默认表中添加新字段,对于如何在前端使用以及扩展表有默认字段等如何处理,可以参考如下链接:https://github.com/aspnetzero/documents/blob/v6.8.0/doc/Extending-Existing-Entities.md。