如何从 Dotnet EF 中删除唯一索引?
How to remove unique index from Dotnet EF?
我有一个模型:
用户
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() 完全不流利
你可以试试下面的代码。
migrationBuilder.DropIndex(name:"IX_Users_AssignedManagerId",table:"Users");
它在我的项目中工作。谢谢
EF Core 被两个自引用 User
导航属性搞糊涂了,并错误地认为您正在尝试对 User.Manager
和 User.Supervisor
之间的一对一关系建模。它(随机)选择 Suprevisor
作为委托人并通过 ManagerId
创建唯一的 FK 关系。 SuprevisorId
不被视为 FK,因此没有为其创建 FK 关系。
像往常一样,当 EF Core 假设不正确时,您应该使用数据注释明确解决它们 and/or 流畅 API。对于自引用关系,唯一的选择是流畅 API,因此将以下内容添加到您的 OnModelCreating
覆盖以创建两个一对多关系:
modelBuilder.Entity<User>().HasOne(e => e.Manager).WithMany();
modelBuilder.Entity<User>().HasOne(e => e.Supervisor).WithMany();
我有一个模型:
用户
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() 完全不流利
你可以试试下面的代码。
migrationBuilder.DropIndex(name:"IX_Users_AssignedManagerId",table:"Users");
它在我的项目中工作。谢谢
EF Core 被两个自引用 User
导航属性搞糊涂了,并错误地认为您正在尝试对 User.Manager
和 User.Supervisor
之间的一对一关系建模。它(随机)选择 Suprevisor
作为委托人并通过 ManagerId
创建唯一的 FK 关系。 SuprevisorId
不被视为 FK,因此没有为其创建 FK 关系。
像往常一样,当 EF Core 假设不正确时,您应该使用数据注释明确解决它们 and/or 流畅 API。对于自引用关系,唯一的选择是流畅 API,因此将以下内容添加到您的 OnModelCreating
覆盖以创建两个一对多关系:
modelBuilder.Entity<User>().HasOne(e => e.Manager).WithMany();
modelBuilder.Entity<User>().HasOne(e => e.Supervisor).WithMany();