nig*_*2k1 6 .net c# asp.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;}
..
}
Run Code Online (Sandbox Code Playgroud)
我检查了我的 MySQL Db,发现 ManagerId 是唯一的。我没有将其设置为唯一。现在我想使用 dotnet ef 迁移删除它。怎么做 ?
我现在使用 donet core 2.1。
我已经测试删除 ManagerID 和 Manager 并执行 dotnet ef 迁移添加 UpdateUser
检查并删除 ManagerID。然后我尝试再次添加新名称AssignedManagerID,它创建了一个新名称,且unique为true。
migrationBuilder.CreateIndex(
name: "IX_Users_AssignedManagerId",
table: "Users",
column: "AssignedManagerId",
unique: true);
Run Code Online (Sandbox Code Playgroud)
我的 Datacontext:公共 DbSet 用户 {get; 放;}
我对 User 的 OnModelCreating() 完全不流利
EF Core 对两个自引用导航属性感到困惑,并错误地认为您正在尝试对和User之间的一对一关系进行建模。它(随机)选择 作为主体并通过 创建唯一的 FK 关系。不被视为 FK,因此不会为其创建 FK 关系。User.ManagerUser.SupervisorSuprevisorManagerIdSuprevisorId
与往常一样,当 EF Core 假设不正确时,您应该使用数据注释和/或流畅的 API 显式解决它们。对于自引用关系,唯一的选择是 Fluent API,因此将以下内容添加到您的OnModelCreating覆盖中以创建两个一对多关系:
modelBuilder.Entity<User>().HasOne(e => e.Manager).WithMany();
modelBuilder.Entity<User>().HasOne(e => e.Supervisor).WithMany();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5982 次 |
| 最近记录: |