在数据库中多对多,但在实体框架中为一对一

时间:2018-07-03 13:05:57

标签: c# entity-framework

我开始着手进行中的项目,它在数据库和代码的某些部分中也具有多对多关系,但是我意识到即使在模型中也存在多对多关系,始终只有一条线链接两个实体(与作者确认)。这就是我的意思:这两个实体分别是任务和任务列表,而任务仅属于任务列表。型号如下:

public class ProjectTask 
{
     public long Id { get; set; }     
    // other non related properties
}

public class ProjectTaskList
{
     public long Id { get; set; }    
     public DateTime? DateEnd { get; set; } 
     // other non related properties
}

// link between task list and task
public class ProjectTaskListTask
{
    public long ProjectTaskId { get; set; }
    public ProjectTask ProjectTask { get; set; }
    public long ProjectTaskListId { get; set; }
    public ProjectTaskList ProjectTaskList { get; set; }
    public int Order { get; set; }
}

及其在上下文类的OnModelCreating方法中的配置:

        modelBuilder.Entity<ProjectTaskListTask>()
            .HasKey(a => new { a.ProjectTaskId, a.ProjectTaskListId });

        modelBuilder.Entity<ProjectTaskListTask>()
        .HasOne(u => u.ProjectTaskList)
        .WithMany(u => u.Tasks)
        .IsRequired()
        .OnDelete(DeleteBehavior.Restrict);

我的问题是:在代码的某些部分中,我需要了解任务的任务列表,我需要在Where查询中使用它来进行一些验证,例如:Tasks.Where(p => p.TaskList.DateEnd == null)。 / p>

如何为ProjectTask实体添加一个Not Mapped属性,以便可以做到这一点?我正在使用Entity Framework Core 2。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

在不更改基础数据结构的情况下,您可以查询ProjectTaskListTask吗?沿线的东西...? ProjectTaskListTask .Include(p => p.ProjectTaskList) .Include(p => p.ProjectTask) .Where(p => p.ProjectTaskList.DateEnd == null) .Select(p => p.ProjectTask);