Как известно в EF-Core нет никакой ленивой загрузки. Таким образом, это означает, что я вынужден делать свои запросы с некоторой запоздалой мыслью. Поэтому, поскольку я должен думать, тогда я мог бы попытаться сделать это правильно.Условное включение и последующее включение
У меня есть стандартный запрос на обновление, но я думал, что мне не всегда нужно включать 0Kи PromoImage
FK-объекты. Должен быть способ сделать так. Но я могу просто не найти способ выполнить Include в более поздней точке. На самом деле я хотел бы, возможно, включить прямо перед тем, как я действительно буду работать над объектом. Таким образом, я мог бы автоматизировать некоторые из них.
ArticleContent ac = _ctx.ArticleContents
.Include(a=> a.Metadata)
.Include(a=> a.HeaderImage)
.Include(a=> a.PromoImage)
.Single(a => a.Id == model.BaseID);
ac.Title = model.Title;
ac.Ingress = model.Ingress;
ac.Body = model.Body;
ac.Footer = model.Footer;
if (model.HeaderImage != null)
{
ac.HeaderImage.FileURL = await StoreImage(model.HeaderImage, $"Header_{model.Title.Replace(" ", "_")}_{rand.Next()}");
}
if (model.PromoImage != null)
{
ac.PromoImage.FileURL = await StoreImage(model.PromoImage, $"Promo_{model.Title.Replace(" ", "_")}_{rand.Next()}");
}
ac.Metadata.EditedById = uId;
ac.Metadata.LastChangedTimestamp = DateTime.Now;
await _ctx.SaveChangesAsync();
EXTRA
Чтобы было ясно, что это EF7 (ядро), и им после того, как решение, которое позволяет мне добавить включает по запросу, надеюсь, после первоначального _ctx.ArticleContents.Include(a=> a.Metadata).Single(a => a.Id == model.BaseID).
Я не думаю, что вы собираетесь быть в состоянии сделать это после того как вы» ve called Single - это материализует объект из базы данных в память, принимая во внимание все Включенные, которые вы указали до этой точки. Чтобы иметь возможность сделать это после того, как факт будет состоять в том, чтобы попросить фреймворк получить дополнительные данные поверх того, что он уже прочитал (т. Е. Вы пытаетесь заставить ленивую загрузку загружать в режим ожидания) –
@MikeGoatly Да, я «Боюсь, что лучший ответ, мое решение мечты будет гибридом между нетерпеливой и ленивой загрузкой. должно существовать что-то вроде 'IncludeIf (a => a.PromoImage, true | false)', что было бы действительно оптимальным решением для моей мечты –