Cara menggunakan anotasi data di C #

Anotasi data (tersedia sebagai bagian dari System. ComponentModel. DataAnnotations namespace) adalah atribut yang dapat diterapkan ke kelas atau anggota kelas untuk menentukan hubungan antar kelas, menjelaskan bagaimana data akan ditampilkan di UI, dan menentukan aturan validasi. Artikel ini membahas tentang anotasi data, mengapa anotasi itu berguna, dan cara menggunakannya dalam aplikasi .NET Core kami.

Untuk bekerja dengan contoh kode yang disediakan dalam artikel ini, Anda harus menginstal Visual Studio 2019 di sistem Anda. Jika Anda belum memiliki salinannya, Anda dapat mengunduh Visual Studio 2019 di sini. 

Buat proyek aplikasi konsol di Visual Studio 2019

Pertama, mari buat proyek Aplikasi Konsol Inti .NET di Visual Studio. Dengan asumsi Visual Studio 2019 diinstal di sistem Anda, ikuti langkah-langkah yang diuraikan di bawah ini untuk membuat proyek aplikasi konsol inti .NET baru di Visual Studio.

  1. Luncurkan Visual Studio IDE.
  2. Klik "Buat proyek baru".
  3. Di jendela "Buat proyek baru", pilih "Aplikasi Konsol (.NET Core)" dari daftar template yang ditampilkan.
  4. Klik Next. 
  5. Di jendela "Configure your new project" yang ditampilkan berikutnya, tentukan nama dan lokasi untuk proyek baru tersebut.
  6. Klik Buat.

Ini akan membuat proyek aplikasi konsol .NET Core baru di Visual Studio 2019. Kami akan menggunakan proyek ini untuk bekerja dengan anotasi data di bagian selanjutnya dari artikel ini.

Sertakan Sistem. ComponentModel. Namespace DataAnnotations

Untuk bekerja dengan contoh kode yang diberikan dalam artikel ini, Anda harus menyertakan Sistem. ComponentModel. Namespace DataAnnotations dalam program Anda.

Perhatikan bahwa atribut digunakan untuk menentukan metadata pada kelas atau properti. Atribut anotasi data secara luas dapat diklasifikasikan menjadi berikut:

  • Atribut validasi - Digunakan untuk memberlakukan aturan validasi pada properti entitas
  • Atribut tampilan - Digunakan untuk menentukan bagaimana data harus ditampilkan di antarmuka pengguna
  • Atribut model - Digunakan untuk menentukan hubungan yang ada antar kelas

Kelas atribut anotasi data di C #

Namespace System.ComponentModel.Annotations terdiri dari beberapa kelas atribut yang dapat digunakan untuk menentukan metadata untuk kelas entitas atau kontrol data Anda. Atribut yang paling umum digunakan meliputi:

  • ConcurrencyCheck
  • Kunci
  • Panjang maksimal
  • Yg dibutuhkan
  • StringLength
  • Stempel waktu

Contoh anotasi data di C #

Buat kelas berikut dalam file bernama Author.cs di aplikasi konsol yang telah kita buat sebelumnya.

kelas publik Penulis

    {

        [Wajib (ErrorMessage = "{0} diperlukan")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Nama Depan minimal 3 karakter dan maksimal 50 karakter")]

        [DataType (DataType.Text)]

        string publik FirstName {get; set; }

        [Wajib (ErrorMessage = "{0} diperlukan")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Nama Belakang harus minimal 3 karakter dan maksimal 50 karakter")]

        [DataType (DataType.Text)]

        string publik LastName {get; set; }

        [DataType (DataType.PhoneNumber)]

        [Telepon]

        public string PhoneNumber {get; set; }

        [DataType (DataType.EmailAddress)]

        [Alamat email]

        public string Email {get; set; }

    }

Cuplikan kode berikut mengilustrasikan bagaimana Anda dapat membuat instance kelas Author dan menetapkan nilai ke propertinya.

Penulis penulis = Penulis baru ();

author.FirstName = "Joydip";

author.LastName = "";

author.PhoneNumber = "1234567890";

author.Email = "[email protected]";

Anda dapat menulis potongan kode berikut dalam metode Utama pada file Program.cs untuk memvalidasi model Anda.

ValidationContext context = new ValidationContext (penulis, null, null);

Daftar validationResults = Daftar baru ();

bool valid = Validator.TryValidateObject (penulis, konteks, validationResults, true);

jika (! valid)

{

  foreach (ValidationResult validationResult di validationResults)

  {

       Console.WriteLine ("{0}", validationResult.ErrorMessage);

  }

}

ValidationContext adalah kelas yang memberi Anda konteks tempat validasi harus dilakukan. Metode statis TryValidateObject dari kelas Validator mengembalikan nilai true jika validasi berhasil, salah jika sebaliknya. Itu juga mengembalikan daftar ValidationResults yang merinci semua validasi yang gagal pada model. Terakhir, kami telah menggunakan foreach loop untuk mengulang daftar ValidationResults dan menampilkan pesan kesalahan di jendela konsol.

Daftar kode lengkap diberikan di bawah ini untuk referensi Anda.

kelas publik Penulis

    {

        [Wajib (ErrorMessage = "{0} diperlukan")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Nama Depan minimal 3 karakter dan maksimal 50 karakter")]

        [DataType (DataType.Text)]

        string publik FirstName {get; set; }

        [Wajib (ErrorMessage = "{0} diperlukan")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Nama Belakang harus minimal 3 karakter dan maksimal 50 karakter")]

        [DataType (DataType.Text)]

        string publik LastName {get; set; }

        [DataType (DataType.PhoneNumber)]

        [Telepon]

        public string PhoneNumber {get; set; }

        [DataType (DataType.EmailAddress)]

        [Alamat email]

        public string Email {get; set; }

    }

    Program kelas

    {      

        static void Main (string [] args)

        {

            Penulis penulis = Penulis baru ();

            author.FirstName = "Joydip";

            author.LastName = ""; // Tidak ada nilai yang dimasukkan

            author.PhoneNumber = "1234567890";

            author.Email = "[email protected]";

            ValidationContext context = new ValidationContext

            (penulis, null, null);

            Daftar validationResults = baru

            Daftar();

            bool valid = Validator.TryValidateObject

            (penulis, konteks, validationResults, true);

            jika (! valid)

            {

                foreach (ValidationResult validationResult in

                validationResults)

                {

                    Console.WriteLine ("{0}",

                    validationResult.ErrorMessage);

                }

            }

            Console.ReadKey ();

        }

    }

Saat Anda menjalankan program, Anda akan melihat pesan kesalahan berikut ditampilkan di jendela konsol:

LastName diperlukan

Buat atribut validasi kustom di C #

Untuk membuat kelas atribut validasi khusus, Anda harus memperluas kelas dasar ValidationAttribute dan mengganti metode IsValid seperti yang ditunjukkan dalam cuplikan kode yang diberikan di bawah ini.

[AttributeUsage (AttributeT Target.Property, AllowMultiple = false, Inherited = false)]

kelas publik IsEmptyAttribute: ValidationAttribute

 {

    public override bool IsValid (nilai objek)

     {

         var inputValue = nilai sebagai string;

         return! string.IsNullOrEmpty (inputValue);

     }

 }

Cuplikan kode berikut mengilustrasikan bagaimana Anda dapat menggunakan atribut khusus untuk menghias properti NamaDepan dan NamaBelakang kelas Penulis.

[IsEmpty (ErrorMessage = "Tidak boleh kosong atau kosong.")]

string publik FirstName {get; set; }

[IsEmpty (ErrorMessage = "Tidak boleh kosong atau kosong.")]

string publik LastName {get; set; }

Anotasi data diperkenalkan pada awalnya di .NET 3.5 sebagai bagian dari Sistem. ComponentModel. Namespace DataAnnotations. Sejak saat itu mereka telah menjadi fitur yang banyak digunakan di .NET. Anda dapat memanfaatkan anotasi data untuk menentukan aturan validasi data di satu tempat dan karenanya menghindari keharusan menulis ulang kode validasi yang sama berulang kali.

Di posting mendatang di sini, kita akan melihat bagaimana anotasi data dapat digunakan dalam aplikasi ASP.NET Core MVC untuk melakukan validasi model.

Bagaimana melakukan lebih banyak di C #

  • Kapan menggunakan kelas abstrak vs. antarmuka di C #
  • Bagaimana bekerja dengan AutoMapper di C #
  • Cara menggunakan ekspresi lambda di C #
  • Cara bekerja dengan delegasi Action, Func, dan Predicate di C #
  • Bagaimana bekerja dengan delegasi di C #
  • Bagaimana menerapkan logger sederhana di C #
  • Bagaimana bekerja dengan atribut di C #
  • Bagaimana bekerja dengan log4net di C #
  • Bagaimana menerapkan pola desain repositori di C #
  • Bagaimana bekerja dengan refleksi di C #
  • Bagaimana bekerja dengan filesystemwatcher di C #
  • Bagaimana melakukan inisialisasi malas di C #
  • Bagaimana bekerja dengan MSMQ di C #
  • Bagaimana bekerja dengan metode ekstensi di C #
  • Bagaimana kami ekspresi lambda di C #
  • Kapan menggunakan kata kunci volatile di C #
  • Cara menggunakan kata kunci hasil di C #
  • Bagaimana menerapkan polimorfisme di C #
  • Cara membuat penjadwal tugas Anda sendiri di C #
  • Bagaimana bekerja dengan RabbitMQ di C #
  • Bagaimana bekerja dengan tupel di C #
  • Menjelajahi metode virtual dan abstrak di C #