В настоящее время у меня есть объекты с названиями Job (родительский объект) и Attachment (дочерний объект с отношением «нет ко многим»). Сущность Attachment имеет логическое свойство под названием IsDeleted, так что я могу использовать его для «удаления» данных в той степени, в которой это касается пользователя, но на самом деле оставить их нетронутыми в базе данных. Конечно, это означает, что мне нужно убедиться, что мои запросы исключают правильные дочерние объекты.
Я не могу понять, как использовать .Include, чтобы получить большинство вложений, но намеренно исключаю те, для которых IsDeleted == true
Модели для этих объектов следующие:
public class Job
{
public int Id { get; set; }
public string Title { get; set; }
public List<Attachment> Attachments { get; set; }
}
public class Attachment
{
public int Id { get; set; }
public string Filename { get; set; }
public bool IsDeleted { get; set; }
}
Как запросить объект Jobs в контексте базы данных, чтобы он включал все вложения, но НЕ те, для которых IsDeleted == true?
Например, если я использую следующий запрос (где я знаю, 16 - это идентификатор нужной мне записи):
var tmpJob = context.Jobs
.Include(j => j.Attachments)
.Where(j => j.Id == 16)
.FirstOrDefault()
Это дает мне все вложения, включая удаленные.
Но я не могу сделать что-то вроде
.Include (j => j.Attachments.Where (a => a.IsDeleted == false)
поскольку это просто не работает.
Я даже рассматривал обходной путь для ручного удаления элементов, например:
var attachments = new List<Attachment>();
foreach (var attachment in tmpJob.Attachments)
{
if (!attachment.IsDeleted)
attachments.Add(attachment);
}
tmpJob.Attachments = attachments;
К сожалению, если я сделаю это, и если позже я внесу изменения в сущность tmpJob (и выполню для него context.SaveChanges), то он полностью удалит отношение FK между Job и Attachment, так что это не будет работать либо.
Я думал, что где-то видел, что то, что я хочу, (в настоящее время) не поддерживается в Entity Framework (версия 2.1, которую я использую), но даже если это так, я не могу понять, даже приемлемый обходной путь.