我正在尝试将此活动从现有的.edmx项目克隆到代码中。
我有两个实体。我希望在不创建新表的情况下拥有多对多的关系。我使用EF Core 2.0代码第一种方法。
请在下面找到我创建的实体。我不确定这是否是正确的方法。
我想在两个表上都有外键列即。分别在WorkCase和Workflow表上的WorkflowId和WorkCaseId。
public class WorkCase
{
[Key]
public int WorkCaseId { get; set; }
public int WorkflowId { get; set; }
public int CaseDetailId {get;set;}
public CaseDetail CaseDetail {get;set;}
public WorkFlow WorkFlow { get; set; }
public ICollection<WorkFlow> WorkFlows { get; set; }
}
public class WorkFlow : BaseEntity
{
[Key]
public int WorkFlowId { get; set; }
public string Comment { get; set; }
public DateTime? UpdateDate { get; set; }
public int WorkCaseId { get; set; }
public WorkCase WorkCase { get; set; }
public ICollection<WorkCase> WorkCases { get; set; }
}
我的期望如下。任何人都可以帮助如何实现EF Core配置: - 工作包将具有最新的工作流程 - 工作流程将包含每个工作单元的历史记录。
由于
答案 0 :(得分:0)
如对您的问题的评论所述,EF Core <= 2.2 does not yet support many-to-many relationships(无联接表)。这是issue在EF Core存储库的后锁中跟踪的情况,可能是make it into version 3.0。
在您的情况下,您需要引入一个与两个父表都相关的新表。在这种情况下,您的模型会喜欢以下内容:
public class WorkCase
{
public int WorkCaseId { get; set; }
public int CaseDetailId { get; set; }
public CaseDetail CaseDetail { get; set; }
public ICollection<WorkCaseWorkflow> Workflows { get; set; }
}
public class Workflow
{
public int WorkflowId { get; set; }
public string Comment { get; set; }
public DateTime? UpdateDate { get; set; }
public ICollection<WorkCaseWorkflow> WorkCases { get; set; }
}
public class WorkCaseWorkflow
{
public int WorkCaseId { get; set; }
public WorkCase WorkCase { get; set; }
public int WorkflowId { get; set; }
public Workflow Workflow { get; set; }
}
然后在您的DbContext
子类中,覆盖OnModelCreating
并添加以下代码:
protected override void OnModelCreating(ModelBuilder builder)
{
var ww = builder.Entity<WorkCaseWorkflow>();
ww.HasKey(w => new { w.WorkCaseId, WorkflowId });
ww.HasOne(w => w.WorkCase)
.WithMany(wc => wc.Workflows)
.HasForeignKey(w => w.WorkCaseId);
ww.HasOne(w => w.Workflow)
.WithMany(wc => wc.WorkCases)
.HasForeignKey(w => w.WorkflowId);
}
我对您的模型不熟悉,但是您可以将共享属性移动到联接表中。
但是,@Arthur Vickers(EF Core开发团队的成员)撰写了一系列有关如何缓解多对多关系的文章: