1
私はLazy<T>
を使用して一度ロードしたいEntity Frameworkを使用して、いくつかの簡単なデータベースクエリを持っていますが、プロパティが呼び出されるたびにクエリが実行されることがわかります。私が試してみましたバリエーションは、以下のとおりです。なぜLazy <T>は怠惰ではありませんか?
public static IEnumerable<string> Foos => new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name)).Value;
public static IEnumerable<string> Foos=> new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name).ToArray()).Value;
public static Lazy<IEnumerable<string>> Foos => new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name).ToArray());
public static IEnumerable<string> LightingEnvironments
{
get
{
var lazy = new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name).ToArray());
return lazy.Value;
}
}
これは間違っているためです。プロパティの外部でインスタンスを作成し、プロパティ内の値にアクセスします。 https://msdn.microsoft.com/en-us/library/dd642331(v=vs.110).aspx – Nkosi