如何將自定義屬性添加到用戶實體


介紹

在本分步指南中,我將解釋如何自定義用戶實體類,該類可根據您的需要在使用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)。

nuget-package-manager

選擇CustomizeUserDemo.EntityFramework.DbMigrations作為默認項目,並執行以下命令:

Add-Migration "Updated-User-Entity"

新增遷移

這將MigrationsCustomizeUserDemo.EntityFrameworkCore.DbMigrations項目文件夾內創建一個新的遷移類

如果您使用的是Visual Studio以外的其他IDE,則可以使用此處記錄的dotnet-ef工具

最后,運行CustomizeUserDemo.DbMigrator項目以更新數據庫。

當我們更新數據庫時,您可以看到TitleReputation列已添加到Users表中。

用戶表

第四步

CustomizeUserDemoModuleExtensionConfiguratorCustomizeUserDemo.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技術控   獲取更多資訊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM