Sourabh Dhiman

Sourabh Dhiman

  • 1.3k
  • 477
  • 11.2k

Faced a error time of migration.

Jun 26 2024 7:58 AM

Hello everyone Please help me I want to achieve this task for existing users, but it is not working.This is my code

```

public partial class AddCodePropertiesToUserTable : Migration
 {
     private readonly DbContext _dbContext;
     /// <inheritdoc />
     public AddCodePropertiesToUserTable(DbContext dbContext)
     {
         _dbContext = dbContext;
     }
     /// <inheritdoc />
     protected override void Up(MigrationBuilder migrationBuilder)
     {
         migrationBuilder.AddColumn<string>(
             name: "Code",
             table: "User",
             type: "text",
             nullable: true);

         migrationBuilder.AddColumn<string>(
             name: "By",
             table: "Users",
             type: "text",
             nullable: true);

         migrationBuilder.CreateIndex(
             name: "IX_Code",
             table: "Users",
             column: "Code",
             unique: true)
             .Annotation("Npgsql:NullsDistinct", true);

         migrationBuilder.CreateIndex(
             name: "IX_By",
             table: "Users",
         column: "By");

     }
     /// <inheritdoc />
     protected override void Down(MigrationBuilder migrationBuilder)
     {
         migrationBuilder.DropIndex(
             name: "Code",
             table: "Users");

         migrationBuilder.DropIndex(
             name: "By",
             table: "Users");

         migrationBuilder.DropColumn(
             name: "Code",
             table: "Users");

         migrationBuilder.DropColumn(
             name: "By",
             table: "Users");
     }
     private void UpdateReferralValuesForExistingUser()
     {

         var usersCode = _dbContext.Users
             .Where(u => u.Code == null)
             .ToList();

         foreach (var user in usersCode)
         {
             user.Code = GenerateUniqueCode(8);
         }
         _dbContext.SaveChanges();
         //}
     }
     public string GenerateUniqueCode(int length)
     {
         if (length < 1)
         {
             throw new ArgumentException("Length must be greater than 0");
         }
         Guid guid = Guid.NewGuid();
         string base36 = Number.ConvertBase36(guid);
         if (base36.Length >= length)
         {
             return base36.Substring(0, length).ToUpper();
         }
         else
         {
             Random random = new Random();
             const string chars = "keys";
             while (base36.Length < length)
             {
                 base36 += chars[random.Next(chars.Length)];
             }
             return base36.ToUpper();
         }
     }
 }
 
 
 
 
        private readonly PvrpleShopDbContext _dbContext;
        /// <inheritdoc />

        private void UpdateReferralValuesForExistingUser()
        {
            // var factory = new PvrpleShopDbContextFactory();
            // using (var context = factory.CreateDbContext(null))
            //{
            var usersWithoutReferralCode = _dbContext.Users
                .Where(u => u.ReferralCode == null)
                .ToList();

            foreach (var user in usersWithoutReferralCode)
            {
                user.ReferralCode = GenerateUniqueReferralCode(8);
            }

            _dbContext.SaveChanges();
            //}
        }
        public string GenerateUniqueReferralCode(int length)
        {
            if (length < 1)
            {
                throw new ArgumentException("Length must be greater than 0");
            }
            Guid guid = Guid.NewGuid();
            string base36String = NumberUtilities.ConvertToBase36(guid);
            if (base36String.Length >= length)
            {
                return base36String.Substring(0, length).ToUpper();
            }
            else
            {
                Random random = new Random();
                const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                while (base36String.Length < length)
                {
                    base36String += chars[random.Next(chars.Length)];
                }
                return base36String.ToUpper();
            }
        }

```


Answers (1)