代码之家  ›  专栏  ›  技术社区  ›  nightingale2k1

如何从Dotnet EF中删除唯一索引?

  •  1
  • nightingale2k1  · 技术社区  · 6 年前

    用户

    public class User {
     public int Id { get; set; }
     public string UserName {get; set;}
     ...
     public int? ManagerId {get; set;}
     public User Manager {get; set;}
     public int? SupervisorId {get; set;}
     public User Supervisor {get; set;}
    ..
    }
    

    目前我使用的是donetcore2.1。

    我已经测试了删除ManagerID和Manager并执行dotnet ef迁移添加UpdateUser

    选中并删除ManagerID。然后我再次尝试添加新名称AssignedManagerID,它创建了一个新名称,其中unique为true。

    migrationBuilder.CreateIndex(
                    name: "IX_Users_AssignedManagerId",
                    table: "Users",
                    column: "AssignedManagerId",
                    unique: true);
    

    公共DbSet用户{get;set;}

    我对用户的OnModelCreating()一点也不流利

    2 回复  |  直到 6 年前
        1
  •  3
  •   Ivan Stoev    6 年前

    EF-Core被这两种自我参照混淆了 User 导航属性,并错误地决定您试图在 User.Manager User.Supervisor . 它(随机)选择 Suprevisor 作为委托人,通过 ManagerId SuprevisorId 不会被视为FK,因此不会为其创建FK关系。

    OnModelCreating 重写以创建两个一对多关系:

    modelBuilder.Entity<User>().HasOne(e => e.Manager).WithMany();
    modelBuilder.Entity<User>().HasOne(e => e.Supervisor).WithMany();
    
        2
  •  0
  •   Maksud    6 年前

    migrationBuilder.DropIndex(name:"IX_Users_AssignedManagerId",table:"Users");
    

    它在我的项目中起作用。谢谢

    推荐文章