EF Core从一对多迁移到多对多

时间:2017-08-08 09:33:45

标签: c# postgresql entity-framework entity-framework-core ef-migrations

我有一对多关系的实体。例如部门到员工。在此示例中,“Employee”实体(表)中包含“DepartmentID”列。

以下是用于说明目的的现有实体 -

public class Department 
{
    public int Id {get;set;}
    public string Name {get;set;}

    public List<Employee> Employees {get;set;}
}

public class Employee 
{
    public int Id {get;set;}
    public string Name {get;set;}

    public int DepartmentId {get;set;}
}

现在在下一个版本中,我想将此关系转换为多对多关系。因此,'DepartmentID'列将远离Employee表,并且将引入新的中间实体(表)'DepartmentEmployee'来管理多对多。

由于应用程序已经在生产中,我想使用EF Core中的迁移功能自动迁移它。对于上面的示例,我必须从Employee表中删除“DepartmentID”列。但是,在删除它之前,映射数据应该迁移到新表(即'DepartmentEmployee')。这意味着,应将员工ID和相应的部门ID添加到“DepartmentEmployee”表中。完成后,我可以从“员工”表中删除“DepartmentID”列。

以下是用于说明目的的新提议实体 -

public class Department 
{
    public int Id {get;set;}
    public string Name {get;set;}  

    public List<DepartmentEmployee> DepartmentEmployees {get;set;}
}

public class Employee 
{
    public int Id {get;set;}
    public string Name {get;set;}

    public List<DepartmentEmployee> DepartmentEmployees {get;set;}
}

public DepartmentEmployee 
{
    public int DepartmentId {get;set;}
    public Department Department {get;set;}

    public int EmployeeId {get;set;}
    public Employee Employee {get;set;}
}

我们使用PostgreSQL作为数据库并在appsettings.json文件中设置连接字符串。因此,我们必须提供连接字符串到DB Context,我们在启动时在DI中配置了它。但是,由于我们不能为Migration类提供带参数的构造函数,因此我无法将DB Context注入Migration类。

那么,如何从Employee表中读取现有的DeparmentID和Employee ID,并在迁移方法“Up”和“Down”之间将它们添加到新的“DepartmentEmployee”表中以进行反向?

0 个答案:

没有答案