强制实体框架不使用NCLOB数据类型



,所以我正在使用ASP.NET身份 实体框架,每当我从代码生成数据库时,许多列类型都是NCLOB,它们非常重。

现在,有几种方法可以修改列的类型,例如HasColumnType方法或设置StringLength属性,或通过配置ModelBuilder来为没有它的人提供HasMaxLength属性。

身份的问题是,某些专门为ID设置的列是稍后设置的。

所以在迁移文件中,我有一个:

                    UserId = c.String(nullable: false, maxLength: 128),
                    Email = c.String(maxLength: 256),
                    EmailConfirmed = c.Decimal(nullable: false, precision: 1, scale: 0),
                    PasswordHash = c.String(),
                    SecurityStamp = c.String(),
                    PhoneNumber = c.String(),

现在应用了我在网上找到的代码后:

            modelBuilder.Properties()
          .Where(p => p.PropertyType == typeof(string) &&
                      p.GetCustomAttributes(typeof(MaxLengthAttribute), false).Length == 0 )
          .Configure(p => p.HasMaxLength(2000));

迁移代码如下:

                    UserId = c.String(nullable: false, maxLength: 2000),
                    Email = c.String(maxLength: 256),
                    EmailConfirmed = c.Decimal(nullable: false, precision: 1, scale: 0),
                    PasswordHash = c.String(maxLength: 2000),
                    SecurityStamp = c.String(maxLength: 2000),
                    PhoneNumber = c.String(maxLength: 2000),

如果您注意到,UserID已经设置为一定值,但即使如此更改。

有能力不改变吗?

谢谢!

好吧,我只需要手动设置他们的属性,以便现在希望使用更自动的解决方案。

        modelBuilder.Entity<IdentityUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId").HasMaxLength(128);
        modelBuilder.Entity<ApplicationUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId").HasMaxLength(128);
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles").Property(p=> p.RoleId).HasMaxLength(128);
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles").Property(p => p.UserId).HasMaxLength(128);
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins").Property(p=> p.UserId).HasMaxLength(128);
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins").Property(p => p.ProviderKey).HasMaxLength(128);
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins").Property(p => p.LoginProvider).HasMaxLength(128);
        modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims").Property(p => p.UserId).HasMaxLength(128); ;
        modelBuilder.Entity<IdentityRole>().ToTable("Roles").Property(p => p.Id).HasMaxLength(128);

相关内容

  • 没有找到相关文章