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