我有一个模特:
用户
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迁移添加UpdateUser
已选中,并且ManagerID已删除。然后我尝试再次添加新名称AssignedManagerID,并创建了一个唯一的名称为true的新名称。
migrationBuilder.CreateIndex(
name: "IX_Users_AssignedManagerId",
table: "Users",
column: "AssignedManagerId",
unique: true);
我的数据上下文: 公共DbSet用户{get;设置;}
我对用户的OnModelCreating()完全没有流利
答案 0 :(得分:1)
EF Core被两个自引用的User
导航属性所迷惑,并且错误地决定您试图对User.Manager
和User.Supervisor
之间的一对一关系进行建模。它(随机)选择Suprevisor
作为主体,并通过ManagerId
创建唯一的FK关系。 SuprevisorId
不被视为FK,因此没有为其创建FK关系。
与往常一样,当EF Core假设不正确时,您应该使用数据注释和/或流畅的API明确解决它们。对于自引用关系,唯一的选择是fluent API,因此请将以下内容添加到您的OnModelCreating
覆盖中以创建两个一对多关系:
modelBuilder.Entity<User>().HasOne(e => e.Manager).WithMany();
modelBuilder.Entity<User>().HasOne(e => e.Supervisor).WithMany();
答案 1 :(得分:0)
您可以尝试以下代码。
migrationBuilder.DropIndex(name:"IX_Users_AssignedManagerId",table:"Users");
它在我的项目中起作用。谢谢