Почему отобранные роли удаляются при каждой миграции в asp .net core 2.1? - PullRequest
0 голосов
/ 26 сентября 2018

Я получаю странное поведение отсеянных ролей при каждой миграции.Независимо от того, какие изменения вы внесли, миграция удалит заполненные роли и вставит их снова.Миграция, приведенная ниже, создается, когда в проекте не производится никаких изменений.

Все остальные модели отображаются правильно и учитываются при миграции, только если они изменены.

Я использую ASP .NET Core2.1 с индивидуальной аутентификацией

DbContext Class для заполнения

 public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        #region Seed-Roles

        modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "SuperAdmin", NormalizedName = "SuperAdmin".ToUpper() });
        modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Owner", NormalizedName = "Owner".ToUpper() });
        modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Admin", NormalizedName = "Admin".ToUpper() });
        modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Tester", NormalizedName = "Tester".ToUpper() });
        modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "User", NormalizedName = "User".ToUpper() });
        modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Developer", NormalizedName = "Developer".ToUpper() });

        #endregion
    }
}

Миграция

protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "4ae1956e-7895-4b0f-a390-22b5c41c1a62", "67b6f36e-5a3c-456b-89ef-c667cf9fe0d3" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "55ebaa87-e350-4d88-8d6f-2c7d833dd24d", "ed91ae85-918f-4651-b7f9-42f6dd90d9b2" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "6ae683e2-5df3-425f-8df7-66581ce56259", "6a4ff0dc-f82f-4c8d-85a1-0258bbf905d7" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "b06b021d-b369-44b3-a5d9-eeb3ef8e245d", "1363d06f-a0cb-4d10-8495-866c219f5560" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "b5331aad-70ec-47a2-8dd0-bc2508bdc353", "ae98d41a-e8fa-46dd-b081-96f9a1934e1e" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "b9fec2b5-6fd2-46a5-a960-a8d26f16d269", "413922ea-76f0-4d2d-8f1a-d9157fb31df0" });

        migrationBuilder.InsertData(
            table: "AspNetRoles",
            columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" },
            values: new object[,]
            {
                { "34e62595-2afc-43f9-bbcd-267773129d69", "c47b3378-ef47-4661-8a01-ceb2fbe34d7c", "SuperAdmin", "SUPERADMIN" },
                { "bc020d73-e415-4d4e-8dfe-577d81755f80", "77d4f05b-6677-4e99-9ada-3f6ec083c14b", "Owner", "OWNER" },
                { "cbfdbeb0-f800-4b42-b735-db1449fcc4e4", "2b8f6650-e2ee-46c1-a70f-36725fb893b3", "Admin", "ADMIN" },
                { "cd0e178d-f9cb-448e-8ecc-49914aa63c5d", "23ee6cfe-4bc2-4c6c-847a-d03aa0087e1f", "Tester", "TESTER" },
                { "4572a259-0d7c-4d1c-ad1d-e0230b7dd1fb", "bcc79860-9207-42bd-8a9c-8aeef0b5fe56", "User", "USER" },
                { "334fd762-7f37-48aa-afdc-a87ef8d0593e", "d929467e-44be-4a94-912f-071702316c85", "Developer", "DEVELOPER" }
            });
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "334fd762-7f37-48aa-afdc-a87ef8d0593e", "d929467e-44be-4a94-912f-071702316c85" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "34e62595-2afc-43f9-bbcd-267773129d69", "c47b3378-ef47-4661-8a01-ceb2fbe34d7c" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "4572a259-0d7c-4d1c-ad1d-e0230b7dd1fb", "bcc79860-9207-42bd-8a9c-8aeef0b5fe56" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "bc020d73-e415-4d4e-8dfe-577d81755f80", "77d4f05b-6677-4e99-9ada-3f6ec083c14b" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "cbfdbeb0-f800-4b42-b735-db1449fcc4e4", "2b8f6650-e2ee-46c1-a70f-36725fb893b3" });

        migrationBuilder.DeleteData(
            table: "AspNetRoles",
            keyColumns: new[] { "Id", "ConcurrencyStamp" },
            keyValues: new object[] { "cd0e178d-f9cb-448e-8ecc-49914aa63c5d", "23ee6cfe-4bc2-4c6c-847a-d03aa0087e1f" });

        migrationBuilder.InsertData(
            table: "AspNetRoles",
            columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" },
            values: new object[,]
            {
                { "6ae683e2-5df3-425f-8df7-66581ce56259", "6a4ff0dc-f82f-4c8d-85a1-0258bbf905d7", "SuperAdmin", "SUPERADMIN" },
                { "55ebaa87-e350-4d88-8d6f-2c7d833dd24d", "ed91ae85-918f-4651-b7f9-42f6dd90d9b2", "Owner", "OWNER" },
                { "4ae1956e-7895-4b0f-a390-22b5c41c1a62", "67b6f36e-5a3c-456b-89ef-c667cf9fe0d3", "Admin", "ADMIN" },
                { "b5331aad-70ec-47a2-8dd0-bc2508bdc353", "ae98d41a-e8fa-46dd-b081-96f9a1934e1e", "Tester", "TESTER" },
                { "b9fec2b5-6fd2-46a5-a960-a8d26f16d269", "413922ea-76f0-4d2d-8f1a-d9157fb31df0", "User", "USER" },
                { "b06b021d-b369-44b3-a5d9-eeb3ef8e245d", "1363d06f-a0cb-4d10-8495-866c219f5560", "Developer", "DEVELOPER" }
            });
    }

Если я делаюЭто неправильно, пожалуйста, уточните мне, как правильно выполнять начальные роли.

1 Ответ

0 голосов
/ 14 ноября 2018

Прочитав много вопросов, ответов и документации, я только что узнал, что если заполненные значения не имеют первичного ключа, то они будут удаляться и воссоздаваться при каждой миграции.

Обычно мы не можем заполнить модель без предоставления первичного ключа.значение, но в случае Microsoft Identity Models их можно заполнять без первичных ключей, поскольку первичные ключи создаются самими методами идентификации.Таким образом, при каждой миграции меняются первичные ключи ролей Seded, что приводит к воссозданию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...