Lazy Loading

Lazy loading suatu data adalah sebuah pattern dimana pengambilan data dari database di tunda sampai benar-benar dibutuhkan. Ini mungkin terdengar seperti hal yang bagus, dan di skenario tertentu, ini akan meningkatkan kinerja aplikasi. Di skenario lain ini akan menurunkan kinerja secara substansial, khususnya pada aplikasi web.

Untuk menggunakan lazy loading, kita harus mengikuti langkah berikut:

  1. Install package Microsoft.EntityFrameworkCore.Proxies

dotnet add package Microsoft.EntityFrameworkCore.Proxies
  1. Gunakan method UseLazyLoadingProxies saat mengkonfigurasi dbcontext di Startup.cs:

services.AddDbContext<TodoContext>(options => {
    options.UseNpgsql(Configuration.GetConnectionString("Dev"));
    options.UseLazyLoadingProxies();
});
  1. Ubah semua property navigasi menjadi virtual:

User.cs
namespace TodoNetExample.Models
{
    public class User : IdentityUser
    {
        public string Name { get; set; }

        public virtual List<TodoList> TodoLists { get; set; }
    }
}
TodoList.cs
namespace TodoNetExample.Models
{
    public class TodoList
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public string UserId { get; set; }
        public virtual User User { get; set; }

        public virtual List<TodoItem> TodoItems { get; set; }
    }
}
TodoItem.cs
namespace TodoNetExample.Models
{
    public class TodoItem
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public int TodoListId { get; set; }
        public virtual TodoList TodoList { get; set; }
    }
}

setelah ini kalian dapat mengakses semua property navigasi ketika dibutuhkan, contohnya pada view detail di TodoList:

@foreach (var item in Model.TodoItems)
{
    <li>@item.Name</li>
}

link commit github lazy loading: link

Last updated