現在、Entity Frameworkを使用するいくつかのコードをリファクタリングしています。Entity FrameworkでLinq Any()の副作用
誰かがEntities.Any()
と呼んでいる理由はわかりませんが、ランダムに見えますが、読み込まれた値がレイジーに上書きされるというコメントがあります。 Any()
と呼んでも、基本となるコレクションを変更しないでください。
このステートメントを削除しても問題ありませんか?
コードは次のようになります。
class MyEFObject {
public virtual ICollection<Entity> Entities { get; set; }
public void SetEntities(ICollection<Entity> entities)
{
// [...]
Entities.Any(); // to override lazyloaded values
Entities = entities.Where(a => a.MyEFObjectId == Id).ToList();
// [...]
}
}
もちろん、私が意図した動作が何であるかを確認することができないので、何のテストはありません。
この記事を見てくださいhttps://www.tutorialspent.com/entity_framework/entity_framework_lazy_loading.htm –
「エンティティ」はメモリ内のコレクションであるように見えますが、これは置き換えようとしています。 'Any()'は、そのコレクションに少なくとも1つのアイテムがあるかどうかをチェックします(そして、結果を破棄します)。私はそれがおそらく何の効果もないのを見ることはできません。 –
私はそのコードを削除しません。 'Any.'はここでは必須ではありません(' GC.KeepAlive(Entities);や同様の擬似メソッドは同じ効果があります)。必須は 'Entities'プロパティ* getter *を呼び出すことです。 –