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

标签 c# asp.net .net entity-framework-core ef-core-2.1

我有一个模型:

用户

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/

相关文章:

c# - 使用现有 key 向 Session 添加新对象是否会替换旧对象?

c# - 使用连接的扫描仪的最简单方法是什么?

c# - LINQ intersect() 方法

c# - 如何在c#中访问数据json.net数组

c# - 当只有一种资源(例如 Kinect 传感器)时,使用静态类/方法是一种好的做法吗

javascript - 内容安全政策

asp.net - '/' 应用程序中的服务器错误。网络平台

javascript - 解析 KendoEditor TextArea 中的特殊字符

c# - 从数组中取出两个数,使和为常数

c# - += 如何比普通表达式更优化