EFコアでよく知られているように、レイジーローディングはありません。そのような意味で、私はいくつかの後から考えて質問しなければなりません。だから私は考えなければならないので、それを正しくやろうとするかもしれない。条件付きで含めると次に含む
私はかなり標準的な更新クエリを持っていますが、私はいつもHeaderImage
と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(コア)で、私は追加することができます解決後のIMがうまくいけば、最初の_ctx.ArticleContents.Include(a=> a.Metadata).Single(a => a.Id == model.BaseID).
私はあなたが「あなたの後にそれを行うことができるようになるだろうとは思いませんこれは単一点と呼ばれます。これは、指定されたすべてのインクルードを考慮に入れて、オブジェクトをデータベースからメモリに実体化します。実際に読み込んだデータの上に追加のデータを取り込むようにフレームワークに依頼することができたら(つまり、レイジーローディングを熱心なローディングアプローチに強制しようとしている) –
@MikeGoatlyはい、私は私の夢の解決策は熱心な読み込みと怠惰な読み込みのハイブリッドになるでしょう。本当に私の夢に最適な解決策になる 'IncludeIf(a => a.PromoImage、true | false) 'のようなものが存在するはずです –