- A+
介绍
在本分步指南中,我将解释如何自定义用户实体类,该类可根据您的需要在使用ABP框架创建的每个Web应用程序中使用。阅读本文时,您将学习如何覆盖内置模块的服务,扩展实体,扩展数据传输对象以及在使用ABP框架开发的应用程序中自定义用户界面。
您可以在文章结尾看到下面的屏幕截图。
准备项目
启动模板和初始运行
Abp Framework提供了启动模板,可以更快地投入工作。我们可以使用Abp CLI创建一个新的启动模板:
abp new CustomizeUserDemo
在本文中,我将介绍MVC应用程序,但它也将在Angular应用程序中工作。
下载完成后,我们可以运行CustomizeUserDemo.DbMigrator项目来创建数据库迁移并植入初始数据(管理员用户,角色等)。然后,我们可以运行CustomizeUserDemo.Web
以查看我们的应用程序正在运行。
默认管理员用户名为admin,密码为1q2w3E *
在本文中,我们将一起研究一个方案,并通过该方案找到问题的解决方案。但是,由于该场景不是现实生活中的场景,因此可能很奇怪,请不要对这个问题太了解?
步骤1
将两个新属性添加到CustomizeUserDemo.Domain项目AppUser
的Users文件夹中,如下所示:
public string Title { get; protected set; } public int Reputation { get; protected set; }
第2步
在CustomizeUserDemo.Domain.Shared项目中创建“用户”文件夹,在文件夹中创建类UserConsts
,然后更新您创建的类,如下所示:
public static class UserConsts { public const string TitlePropertyName = "Title"; public const string ReputationPropertyName = "Reputation"; public const int MaxTitleLength = 64; public const double MaxReputationValue = 1_000; public const double MinReputationValue = 1; }
第三步
更新EntityFrameworkCore文件夹中CustomizeUserDemo.EntityFramework项目中的CustomizeUserDemoEfCoreEntityExtensionMappings
类,如下所示:
public static class CustomizeUserDemoEfCoreEntityExtensionMappings { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); public static void Configure() { CustomizeUserDemoGlobalFeatureConfigurator.Configure(); CustomizeUserDemoModuleExtensionConfigurator.Configure(); OneTimeRunner.Run(() => { ObjectExtensionManager.Instance .MapEfCoreProperty<IdentityUser, string>( nameof(AppUser.Title), (entityBuilder, propertyBuilder) => { propertyBuilder.IsRequired(); propertyBuilder.HasMaxLength(UserConsts.MaxTitleLength); } ).MapEfCoreProperty<IdentityUser, int>( nameof(AppUser.Reputation), (entityBuilder, propertyBuilder) => { propertyBuilder.HasDefaultValue(UserConsts.MinReputationValue); } ); }); } }
此类可用于将这些额外的属性映射到数据库中的表字段。请阅读此文章,以提高你的,我们正在做的事情的理解。
到目前为止,我们已经将额外的功能添加到了User
实体中,并将这些功能与进行了匹配ef core
。
现在,我们需要添加迁移,以查看数据库中发生了什么变化。为此,请在菜单工具> NuGet软件包管理器下打开软件包管理器控制台(PMC)。
选择CustomizeUserDemo.EntityFramework.DbMigrations作为默认项目,并执行以下命令:
Add-Migration "Updated-User-Entity"
这将Migrations
在CustomizeUserDemo.EntityFrameworkCore.DbMigrations项目的文件夹内创建一个新的迁移类。
如果您使用的是Visual Studio以外的其他IDE,则可以使用此处记录的
dotnet-ef
工具。
最后,运行CustomizeUserDemo.DbMigrator项目以更新数据库。
当我们更新数据库时,您可以看到Title
和Reputation
列已添加到Users
表中。
第四步
CustomizeUserDemoModuleExtensionConfigurator
在CustomizeUserDemo.Domain.Shared项目中打开,然后更改ConfigureExtraProperties
方法的内容,如下所示:
private static void ConfigureExtraProperties() { ObjectExtensionManager.Instance.Modules().ConfigureIdentity(identity => { identity.ConfigureUser(user => { user.AddOrUpdateProperty<string>( UserConsts.TitlePropertyName, options => { options.Attributes.Add(new RequiredAttribute()); options.Attributes.Add( new StringLengthAttribute(UserConsts.MaxTitleLength) ); } ); user.AddOrUpdateProperty<int>( UserConsts.ReputationPropertyName, options => { options.DefaultValue = UserConsts.MinReputationValue; options.Attributes.Add( new RangeAttribute(UserConsts.MinReputationValue, UserConsts.MaxReputationValue) ); } ); }); }); }
而已。现在,让我们运行该应用程序,然后查看“身份”用户页面。如果需要,您也可以尝试编辑并重新创建记录,即使我们没有做任何额外的事情,它也将起作用。这是ABP框架背后的魔术代码。
如果需要添加情况,可以单击“贡献”按钮或发表评论。另外,如果您喜欢这篇文章,请不要忘记分享它?
快乐编码?
关注公众号:UP技术控 获取更多资讯