[英]How to Drop Unique Constraint with code-first migration in asp.net-core
我有一个项目,我添加了一个带有外键的初始迁移,如下所示:
public class ApplicationUser : IdentityUser
{
public string RegistrarId { get; set; }
[ForeignKey("RegistrarId")]
public virtual ApplicationUser Registrar { get; set; }
}
但是,我意识到当我运行代码优先迁移时,它会自动在 Registrar 列上创建一个唯一索引,这违背了我的意愿。
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_RegistrarId",
table: "AspNetUsers",
column: "RegistrarId",
unique: true,
filter: "[RegistrarId] IS NOT NULL");
我的问题是,有没有办法修改我的类以通过另一个迁移删除此约束。
下面是我对 ApplicationUser 实体 onModelCreating 所拥有的
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>(b =>
{
// Each User can have many UserClaims
b.HasMany(e => e.Claims)
.WithOne(e => e.User)
.HasForeignKey(uc => uc.UserId)
.IsRequired();
// Each User can have many UserLogins
b.HasMany(e => e.Logins)
.WithOne(e => e.User)
.HasForeignKey(ul => ul.UserId)
.IsRequired();
// Each User can have many UserTokens
b.HasMany(e => e.Tokens)
.WithOne(e => e.User)
.HasForeignKey(ut => ut.UserId)
.IsRequired();
// Each User can have many entries in the UserRole join table
b.HasMany(e => e.UserRoles)
.WithOne(e => e.User)
.HasForeignKey(ur => ur.UserId)
.IsRequired();
b.HasIndex(e => e.Email)
.IsUnique();
});
我的应用程序在 ASP.NET-Core 3.1 上,带有 EF-Core 3.1 和 SQLServer
请帮忙谢谢
您很可能在OnModelCreating
配置了唯一索引。 如果这样做,只需将其翻转为 false。
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<ApplicationUser>()
.HasIndex(x => x.RegistrarId)
.IsUnique(false);
base.OnModelCreating(builder);
}
它将生成“删除和创建”索引迁移,但没有唯一属性
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_AspNetUsers_RegistrarId",
table: "AspNetUsers");
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_RegistrarId",
table: "AspNetUsers",
column: "RegistrarId");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.