,所以我正在使用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);