Многие ко многим в базе данных, но один к одному в структуре объекта - PullRequest
0 голосов
/ 03 июля 2018

Я начал работать над текущим проектом, и он имеет отношение «многие ко многим» в базе данных и некоторых частях кода, но я понял, что даже отношение «многие ко многим» в модели существует всегда только одна строка, связывающая две сущности (подтверждено автором). Вот что я имею в виду: две сущности - это задача и список задач, а задача принадлежит только списку задач. Модели ниже:

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).

Как добавить свойство Not Mapped к сущности ProjectTask, чтобы я мог это сделать? Я использую Entity Framework Core 2.

Спасибо за любую помощь

1 Ответ

0 голосов
/ 03 июля 2018

Не изменяя базовую структуру данных, не могли бы вы запросить ProjectTaskListTask? Что-то в этом роде ...? ProjectTaskListTask .Include(p => p.ProjectTaskList) .Include(p => p.ProjectTask) .Where(p => p.ProjectTaskList.DateEnd == null) .Select(p => p.ProjectTask);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...