簡體   English   中英

如何在 asp.net-core 中使用代碼優先遷移刪除唯一約束

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM