EF Core 在每次迁移时更新种子数据而不进行更改

所以我用这样的用户和角色播种我的数据库。


public static void SeedUsers(this ModelBuilder modelBuilder)

    {

        var roles = new[]

        {

            new Role

            {

                Id = new Guid("5127599a-e956-4f5e-9385-1b8c6a74e4f1"),

                RoleName = "Customer"

            },

            new Role

            {

                Id = new Guid("8634c476-20fa-4391-b8f7-8713abf61af0"),

                RoleName = "Admin"

            }

        };


        // customer password

        byte[] customerPasswordHash = null;

        byte[] customerPasswordSalt = null;

        HashPassword("asd123", out customerPasswordHash, out customerPasswordSalt);


        // admin password

        byte[] adminPasswordHash = null;

        byte[] adminPasswordSalt = null;

        HashPassword("asd123", out adminPasswordHash, out adminPasswordSalt);

        var users = new[]

        {

            new Users()

            {

                Id = new Guid("3b86f5a2-1978-46e3-a0b6-edbb6b558efc"),

                FirstName = "John",

                LastName = "Doe",

                DepositedCash = 10000,

                Email = "john@doe.com",

                RoleId = roles[0].Id,

                PasswordHash = customerPasswordHash,

                PasswordSalt = customerPasswordSalt

            },

            new Users()

            {

                Id = new Guid("c643b944-53d9-4a0c-9922-3486558b9129"),

                FirstName = "Admin",

                LastName = "Admin",

                DepositedCash = 10000,

                Email = "admin@admin.com",

                RoleId = roles[1].Id,

                PasswordHash = adminPasswordHash,

                PasswordSalt = adminPasswordSalt

            }

        };


        modelBuilder.Entity<Role>()

            .HasData(roles);


        modelBuilder.Entity<Users>()

            .HasData(users);

    }



我正在创建迁移并更新数据库。到目前为止,一切都很好。


之后,当我创建另一个测试迁移时,不更改任何内容,它会创建一个具有相同数据的 UpdateData 方法。一切Up和Down方法都是一样的。


为什么它在没有任何变化的情况下更新用户?我错过了什么?


慕容森
浏览 146回答 1
1回答

www说

您必须使用原始值播种以避免这种情况:var users = new[]&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Users()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Id = new Guid("3b86f5a2-1978-46e3-a0b6-edbb6b558efc"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstName = "John",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LastName = "Doe",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DepositedCash = 10000,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Email = "john@doe.com",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RoleId = roles[0].Id,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PasswordHash = new byte[] { 211, 141, 232, 166, 77, 237, 128, 211, 121, 45, 47, 68, 211, 202, 162, 3, 39, 214, 212, 153, 4, 199, 223, 213, 43, 233, 224, 21, 107, 10, 62, 220, 105, 27, 254, 137, 16, 208, 56, 42, 254, 211, 154, 27, 60, 135, 197, 224, 148, 99, 232, 246, 220, 121, 113, 103, 42, 117, 172, 240, 134, 14, 188, 25 },&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PasswordSalt = new byte[] { 112, 114, 101, 100, 101, 102, 105, 110, 101, 100, 32, 107, 101, 121 }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new Users()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Id = new Guid("c643b944-53d9-4a0c-9922-3486558b9129"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstName = "Admin",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LastName = "Admin",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DepositedCash = 10000,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Email = "admin@admin.com",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RoleId = roles[1].Id,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PasswordHash = new byte[] { 211, 141, 232, 166, 77, 237, 128, 211, 121, 45, 47, 68, 211, 202, 162, 3, 39, 214, 212, 153, 4, 199, 223, 213, 43, 233, 224, 21, 107, 10, 62, 220, 105, 27, 254, 137, 16, 208, 56, 42, 254, 211, 154, 27, 60, 135, 197, 224, 148, 99, 232, 246, 220, 121, 113, 103, 42, 117, 172, 240, 134, 14, 188, 25 },&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PasswordSalt = new byte[] { 112, 114, 101, 100, 101, 102, 105, 110, 101, 100, 32, 107, 101, 121 }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; };这样,EF Core 将生成一个迁移,知道这是一个固定值,并且不会在每次迁移中更新它。使用方法(此处为 HashPassword)可防止 EF Core 将其视为已修复。
打开App,查看更多内容
随时随地看视频慕课网APP