介紹
在本分步指南中,我將解釋如何自定義用戶實體類,該類可根據您的需要在使用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技術控 獲取更多資訊