Muk*_*thi 4 entity-framework-core asp.net-core-2.0
我正在尝试通过此活动从现有的 .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; }
}
Run Code Online (Sandbox Code Playgroud)
我的期望如下。任何人都可以帮助如何实现 EF Core 配置: - 工作案例将具有最新的工作流 ID - 工作流将具有每个工作案例 ID 的历史记录。
谢谢
更新:EF5+ 支持多对多,无需显式映射连接表。请参阅此 EF 公告 正如对您的问题所评论的那样,EF Core <= 2.2尚不支持没有连接表的多对多关系。这是在 EF Core 存储库的 backlock 中跟踪的一个问题,并且可能会使其成为 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; }
}
Run Code Online (Sandbox Code Playgroud)
然后在您的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);
}
Run Code Online (Sandbox Code Playgroud)
我不熟悉您的模型,但您可以将共享属性移动到连接表。
但是,@Arthur Vickers(EF Core 开发团队的成员)撰写了一系列关于如何缓解多对多关系的文章:
| 归档时间: |
|
| 查看次数: |
5295 次 |
| 最近记录: |