EF Core (Entity Framework Core) 9 adalah ORM framework versi terbaru yang disempurnakan yang ditujukan untuk pengembangan aplikasi berbasis .NET sehingga pengembang dapat bekerja dan mengembangkan aplikasi dalam lingkungan object/class berbasis .NET . Framework EF Core 9 ini di release untuk mendukung kelebihan kelebihan yang ada dari .NET 9, sehingga aplikasi yang menggunakan EF Core 9 bisa diuntungkan dari segi performance boost.

Untuk menggunakan EF Core di aplikasi yang akan kita buat, pertama kita siapkan terlebih dahulu database yang akan kita mapping ke dalam class/object ORM. Di sini, kita akan menggunakan sample database yang bisa kita unduh dari alamat https://learn.microsoft.com/en-us/sql/samples/adventureworks-install-configure?view=sql-server-ver16&tabs=ssms#download-backup-files . Berikut adalah contoh database AdventureWork2022 yang berjalan di server SQL Server 2022 Developer dengan tabel terkait Sales

Gambar 1. Database AdventureWorks2022 di SQL Server 2022

Selanjutnya adalah menambahkan nuget package dari library EF Core 9 tersebut ke reference aplikasi yang akan kita buat. Jika kita cek pada Nuget Package Manager dari visual studio, ada banyak sekali package terkait EF Core tersebut. Karena kita menggunakan database SQL Server , maka kita cari nuget EF Core yang terkait Sql Server

Gambar 2. Visual Studio 2022 Nuget Package Manager

Untuk kebutuhan minimum supaya berjalan lancar dan sekaligus bisa men-generate class DbContext, maka kita perlukan nuget berikut ini :

  • Microsoft.EntityFrameworkCore versi 9.0.4 ke atas
  • Microsoft.EntityFrameworkCore.Design versi 9.0.4 ke atas
  • Microsoft.EntityFrameworkCore.Tools versi 9.0.4 ke atas
  • Microsoft.EntityFrameworkCore.SqlServer versi 9.0.4 ke atas
Gambar 3. Nuget Package EF Core

Selanjutnya kita perlu mengenerate class class mapping untuk tabel yang ada di database sekaligus membuat class DbContext untuk mengakses tabel tabel tersebut melalui Object .NET. Yang perlu disiapkan adalah

  1. Connection string ke database
  2. Output directory dari class class entity yang merupakan mapping tabel database
  3. Namespace dari class class entity
  4. Output directory dari class DB Context
  5. Nama class dari DB Context yang akan dibuat
  6. Namespace dari class DB Context
  7. Nama schema yang akan digenerate

Jika ke 7 hal tersebut sudah ditentukan, maka berikut ini adalah command perintah untuk men-generate db context dari Entity Framework

Scaffold-DbContext -Connection "Data Source=;Initial Catalog=;Persist Security Info=True;Integrated Security=true;MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=False;Connection Timeout=30;" -Provider "Microsoft.EntityFrameworkCore.SqlServer" -OutputDir "NamaFolder" -ContextDir "NamaFolderContext" -Context "NamaDbContext" -Schemas "dbo"  -DataAnnotations -UseDatabaseNames -Force -Namespace "EF.Entities" -ContextNamespace "EF.DbContext"

Jika disesuaikan maka untuk contoh di sini kurang lebih menjadi seperti berikut

Scaffold-DbContext -Connection "Data Source=MY-PC\MSSQL;Initial Catalog=AdventureWork2022;Persist Security Info=True;Integrated Security=true;MultipleActiveResultSets=False;Encrypt=False;TrustServerCertificate=False;Connection Timeout=30;" -Provider "Microsoft.EntityFrameworkCore.SqlServer" -OutputDir "Entities" -ContextDir "Context" -Context "AppDbContext" -Schemas "sales"  -DataAnnotations -UseDatabaseNames -Force -Namespace "EF.Entities" -ContextNamespace "EF.AppDbContext"

Selanjutnya, buka Package Manager Console dari visual studio. pastikan kita berada di directory dari project yang akan kita generate Db Contextnya.

Gambar 4 : Package Manager Console

Ketikkan DIR untuk memastikan bahwa current working directory adalah folder dari project yang akan digenerate DB Context nya.

Gambar 5 : Package Manager Console

Jika folder dirasa sudah benar, masukkan perintah generate ke dalam command prompt Package Manager Console, seperti berikut

Gambar 6 : Scaffold-DbContext melalui Package Manager Console

Apabila berhasil, maka akan muncul pesan Build Succeeded, dan jika dilihat pada solution akan tampil file dan folder baru

Gambar 7 : File dan folder baru dari class clas entity yang berhasil digenerate.

Sekarang mari kita coba mengakses database melalui class class entity yang telah dibuat. Kita akan menampilkan sales yang memiliki bonus diatas 2000USD dan sales yang memiliki bonus dibawah 2000USD. Perhatikan kode C# berikut ini :

using EF.AppDbContext;
using EF.Entities;

namespace ConsoleApp123
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");

            var dbContext = new AppDbContext();

            var salesGendut = dbContext.SalesPeople.Where(s => s.Bonus > 2000).ToList();
            var salesJunior = dbContext.SalesPeople.Where(s => s.Bonus <= 2000).ToList();

            Console.WriteLine("Sales dengan bonus diatas 2000 USD :");
            for (int i = 0; i < salesGendut.Count; i++)
            {
                int nomer = i + 1;
                Console.WriteLine($"{nomer}. ID {salesGendut[i].BusinessEntityID} has bonus USD {salesGendut[i].Bonus:#,##0.00}");
            }

            Console.WriteLine();
            Console.WriteLine("Sales dengan bonus dibawah 2000 USD :");
            for (int i = 0; i < salesJunior.Count; i++)
            {
                int nomer = i + 1;
                Console.WriteLine($"{nomer}. ID {salesJunior[i].BusinessEntityID} has bonus USD {salesJunior[i].Bonus:#,##0.00}");
            }
        }
    }
}

Output dari program tersebut sebagai berikut

Gambar 8 : Output aplikasi

Akses terhadap database dan tabel SalesPerson sebenarnya terjadi pada baris berikut ini, dimana .NET mentranslasikan LINQ dan object ke bahasa sql yang dikirimkan ke sql server.


            var salesGendut = dbContext.SalesPeople.Where(s => s.Bonus > 2000).ToList();
            var salesJunior = dbContext.SalesPeople.Where(s => s.Bonus <= 2000).ToList();



Leave a Reply

Your email address will not be published. Required fields are marked *

Search

Welcome

Bayu Pratama R N is a lonely programmer who is very enthusiastic about .NET. He just try to live a life of a programmer life and write a blog post when he is so sick about love.

Gallery