C# Source Code Generator

Tujuan dibuatnya aplikasi ini :

  • Membuat proyek baru berdasarkan template yang ditentukan.
  • Menambahkan referensi paket kedalam file proyek.
  • Generate model dari server sql database pada entity framework core menggunakan scaffold
  • Generate data access layer atau repository pattern unit of work
  • Generate source code CRUD dasar dari database

Entity Framework Core CLI :

Install

dotnet tool install --global dotnet-ef

Update

dotnet tool update --global dotnet-ef

Jalankan perintah berikut untuk memverifikasi tools EF Core CLI sudah terinstall dengan benar:

dotnet ef

Download : CodeGenerator.zip

Untuk menjalankan aplikasi ini :

  • Edit file appsettings.json
  • Jalankan program CodeGenerator.exe

Penjelasan appsettings.json :

{
  "DalOrRepository": true,          ---> (wajib) true : DAL, false : repository pattern 
  "VirtualGetterSetter": false,     ---> (wajib) bool 
  "Nullable": false,                ---> (wajib) bool
  "Database": {
    "Host": "",                     ---> (wajib) database server
    "Name": "",                     ---> (wajib) database name
    "User": "",                     ---> (wajib) database user
    "Pass": ""                      ---> (wajib) database pass
  },
  "Project": {
    "Name": "AppName",              ---> (wajib) nama proyek, contoh: AppName
    "Namespace": "AppName",         ---> (opsional) namespace proyek, jika tidak diisi maka akan merujuk ke nama proyek, contoh: AppName
    "Template": "console",          ---> (wajib) .net default templates untuk dotnet new, default console
    "Language": "C#",               ---> (wajib) bahasa C# 
    "Framework": "net7.0",          ---> (wajib) net6.0 or net7.0
    "WorkingPath": ""               ---> (opsional) lokasi folder proyek, jika tidak diisi proyek akan disimpan di desktop windows
  },
  "Entity": {
    "Namespace": "AppName.Models",  ---> (wajib) namespace yang akan digunakan untuk semua kelas yang dihasilkan. defaultnya dihasilkan dari namespace utama dan direktori folder proyek.
    "OutputPath": "Models",         ---> (wajib) direktory tempat file akan disimpan. lokasi folder relatif terhadap direktori proyek
    "SchemaName": "",               ---> (opsional) schemas dari tables dan views untuk mengenerate tipe entitas 
    "TableName": "",                ---> (opsional) tables dan views untuk mengenerate tipe entitas. 
    "DataContext": { 
      "Name": "AppDbContext",       ---> (wajib) default nama data context
      "NameSpace": "AppName.Models",  ---> (wajib) namespace untuk data context
      "Path": "Models"              ---> (wajib) direktori tempat file disimpan. lokasi folder relatif terhadap direktori proyek
    },
    "OnConfiguring": false,         ---> (wajib) false : suppresses generation of the OnConfiguring method in the generated DbContext class.
    "Pluralize": false,             ---> (wajib) false : tidak menggunakan pluralizer.
    "UseDataAnnotations": false,    ---> (wajib) true  : gunakan attribute untuk mengkonfigurasi model (jika memungkinkan). Jika opsi ini dihilangkan, hanya fluent API yang digunakan. 
    "UseDatabaseName": true,        ---> (wajib) true  : menggunakan nama table, view, sequence, dan kolom yang sama persis dengan yang ada didatabase. Jika opsi ini dihilangkan, nama database akan dirubah sesusi konvensi penamaan C#.
    "Force": true                   ---> (wajib) true  : menimpa file existing.
  },
  "DataAccessLayer": {
    "DAO": "DAO",                   ---> (wajib)
    "BLL": "BLL",                   ---> (wajib)
    "DTO": "DTO",                   ---> (wajib)
    "Validator": "Validator"        ---> (wajib)
  },
  "RepositoryPattern": {
    "Repository": "Repository",     ---> (wajib)
    "IRepository": "IRepository",   ---> (wajib)
    "Entity": "Entity"              ---> (wajib)
  },
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

Contoh Penggunaan Data Access Layer

// SELECT SINGLE
var result = CustomerBLL.SelectId(1);
if (result != null)
{
    Console.WriteLine("Ship To Code : " + result.ShipToCode.Trim());
    Console.WriteLine("Ship To Address : " + result.ShipToAddress.Trim());
}

// SELECT
- Example 1

var result = CustomerBLL.Select();
if (result != null)
{
    foreach (var item in result)
    {
        Console.WriteLine("Ship To Code    : " + item.ShipToCode.Trim());
        Console.WriteLine("Ship To Address : " + item.ShipToAddress.Trim());
        Console.WriteLine();
    }
}

- Example 2

var result = CustomerBLL.Select().Where(x =>
   x.CustomerId == 1
);

if (result != null)
{
    foreach (var item in result)
    {
        Console.WriteLine("Ship To Code    : " + item.ShipToCode.Trim());
        Console.WriteLine("Ship To Address : " + item.ShipToAddress.Trim());
        Console.WriteLine();
    }
}


// UPDATE
var result = TypePersonnelBLL.SelectId(4);
result.Description = "NAHKODA";
TypePersonnelBLL.Update(result);


// INSERT
TypePersonnel typePersonel = new TypePersonnel();
typePersonel.Description = "Type Baru";
TypePersonnelBLL.Insert(typePersonel);

// DELETE
var result = TypePersonnelBLL.SelectId(4);
TypePersonnelBLL.Delete(result);