我有一个模型:
用户
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;}
..
}
我检查了我的 MySQL Db,发现 ManagerId 是唯一的。我没有将其设置为唯一。现在我想使用 dotnet ef 迁移删除它。怎么做?
我目前使用的是donet core 2.1。
我测试了删除 ManagerID 和 Manager 并执行 dotnet ef migrations add UpdateUser
已检查并删除了 ManagerID。然后我尝试再次添加新名称 AssignedManagerID,它创建了一个具有唯一性的新名称。
migrationBuilder.CreateIndex(
name: "IX_Users_AssignedManagerId",
table: "Users",
column: "AssignedManagerId",
unique: true);
我的数据上下文: 公共(public) DbSet 用户 {get;设置;
我对用户的 OnModelCreating() 一点都不流利
最佳答案
EF Core 被两个自引用搞糊涂了 User
导航属性并错误地决定您正在尝试对 User.Manager
之间的一对一关系建模和 User.Supervisor
.它(随机)选择 Suprevisor
作为委托(delegate)人并通过 ManagerId
创建独特的 FK 关系. SuprevisorId
不被视为 FK,因此不会为其创建 FK 关系。
像往常一样,当 EF Core 假设不正确时,您应该使用数据注释和/或流畅的 API 明确解决它们。对于自引用关系,唯一的选择是流畅的 API,因此将以下内容添加到您的 OnModelCreating
重写以创建两个一对多关系:
modelBuilder.Entity<User>().HasOne(e => e.Manager).WithMany();
modelBuilder.Entity<User>().HasOne(e => e.Supervisor).WithMany();
关于c# - 如何从 Dotnet EF 中删除唯一索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52287843/