c# - 如何在 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();
});
我的应用程序在带有 EF-Core 3.1 和 SQLServer 的 ASP.NET-Core 3.1 上
请帮忙谢谢
解决方案
您很可能在OnModelCreating
. 如果你这样做,只需将其翻转为假。
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");
}
推荐阅读
- node.js - nodejs mssql没有在PUT上返回数据
- c - 字符限制被忽略 [c]
- javascript - 如何解决承诺功能
- html - 窗户上的中心垫卡
- c++ - clang 编译器说:变量“ptr”可能未初始化
- javascript - [Python][Javascript] 无法弄清楚如何将 API 调用从 NEXTjs 网页 GUI 发送到 Python Falcon 后端
- azure - 在使用 Azure 空间锚点时,我还需要考虑哪些其他 Azure 服务?
- python - 在 tensorflow-gpu 2.0 上计算 WGAN-GP 的梯度惩罚失败
- umbraco - UmbracoCms 以错误结束:此 SqlTransaction 已完成;它不再可用
- javascript - 打字稿错误“只读”类型上不存在属性x
& Readonly<{ children?: ReactNode; }>'