为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕容森 2022-10-23 16:50:40
所以我用这样的用户和角色播种我的数据库。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方法都是一样的。为什么它在没有任何变化的情况下更新用户?我错过了什么?
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

您必须使用原始值播种以避免这种情况:


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 = 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 },

                PasswordSalt = new byte[] { 112, 114, 101, 100, 101, 102, 105, 110, 101, 100, 32, 107, 101, 121 }

            },

            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 = 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 },

                PasswordSalt = new byte[] { 112, 114, 101, 100, 101, 102, 105, 110, 101, 100, 32, 107, 101, 121 }

            }

        };

这样,EF Core 将生成一个迁移,知道这是一个固定值,并且不会在每次迁移中更新它。使用方法(此处为 HashPassword)可防止 EF Core 将其视为已修复。


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号