Cara menggunakan anotasi data di C #

Anotasi data (tersedia sebagai sebahagian daripada Sistem. ComponentModel. Ruang nama DataAnnotations) adalah atribut yang boleh digunakan untuk kelas atau ahli kelas untuk menentukan hubungan antara kelas, menerangkan bagaimana data tersebut akan dipaparkan di UI, dan menentukan peraturan pengesahan. Artikel ini membincangkan mengenai anotasi data, mengapa ia berguna, dan cara menggunakannya dalam aplikasi .NET Core kami.

Untuk bekerja dengan contoh kod yang disediakan dalam artikel ini, anda harus memasang Visual Studio 2019 di sistem anda. Sekiranya anda belum mempunyai salinannya, anda boleh memuat turun Visual Studio 2019 di sini. 

Buat projek aplikasi konsol di Visual Studio 2019

Pertama, mari buat projek Aplikasi Konsol Teras .NET di Visual Studio. Dengan mengandaikan Visual Studio 2019 dipasang di sistem anda, ikuti langkah-langkah yang digariskan di bawah untuk membuat projek Aplikasi Konsol Teras NET baru di Visual Studio.

  1. Lancarkan ID Studio Visual.
  2. Klik pada "Buat projek baru."
  3. Di tetingkap "Buat projek baru", pilih "Aplikasi Konsol (.NET Core)" dari senarai templat yang dipaparkan.
  4. Klik Seterusnya. 
  5. Di tetingkap "Konfigurasikan projek baru anda" yang ditunjukkan di sebelah, tentukan nama dan lokasi untuk projek baru.
  6. Klik Buat.

Ini akan membuat projek aplikasi konsol .NET Core baru di Visual Studio 2019. Kami akan menggunakan projek ini untuk bekerja dengan anotasi data di bahagian seterusnya artikel ini.

Sertakan Sistem. KomponenModel. Ruang nama DataAnnotations

Untuk bekerja dengan contoh kod yang diberikan dalam artikel ini, anda harus memasukkan Sistem. KomponenModel. Ruang nama DataAnnotations dalam program anda.

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

  • Atribut pengesahan - Digunakan untuk menguatkuasakan peraturan pengesahan terhadap sifat entiti
  • Atribut paparan - Digunakan untuk menentukan bagaimana data harus ditampilkan di antara muka pengguna
  • Atribut pemodelan - Digunakan untuk menentukan hubungan yang wujud antara kelas

Kelas atribut anotasi data dalam C #

Ruang nama System.ComponentModel.Annotations merangkumi beberapa kelas atribut yang boleh digunakan untuk menentukan metadata untuk kelas entiti atau kawalan data anda. Atribut yang paling biasa digunakan merangkumi yang berikut:

  • Pemeriksaan bersamaan
  • Kunci
  • Panjang maksimum
  • Dikehendaki
  • Panjang tali
  • Cap waktu

Contoh anotasi data dalam C #

Buat kelas berikut dalam fail bernama Author.cs di aplikasi konsol yang telah kami buat sebelumnya.

Pengarang kelas awam

    {

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

        [Panjang String (50, Panjang Minimum = 3,

        ErrorMessage = "Nama Pertama hendaklah minimum 3 aksara dan maksimum 50 aksara")]

        [DataType (DataType.Text)]

        rentetan awam FirstName {get; menetapkan; }

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

        [Panjang String (50, Panjang Minimum = 3,

        ErrorMessage = "Nama Akhir hendaklah minimum 3 aksara dan maksimum 50 aksara")]

        [DataType (DataType.Text)]

        rentetan umum LastName {get; menetapkan; }

        [Jenis Data (DataType.PhoneNumber)]

        [Telefon]

        tali nombor telefon awam {get; menetapkan; }

        [Jenis Data (DataType.EmailAddress)]

        [Alamat emel]

        rentetan awam E-mel {get; menetapkan; }

    }

Coretan kod berikut menggambarkan bagaimana anda dapat membuat contoh kelas Pengarang dan memberikan nilai pada sifatnya.

Pengarang pengarang = Pengarang baru ();

pengarang.FirstName = "Joydip";

pengarang.LastName = "";

pengarang.PhoneNumber = "1234567890";

pengarang.Email = "[email protected]";

Anda boleh menulis coretan kod berikut dalam kaedah Utama fail Program.cs untuk mengesahkan model anda.

ValidationContext konteks = ValidationContext baru (pengarang, null, null);

Pengesahan senaraiResults = Daftar baru ();

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

jika (! sah)

{

  foreach (Pengesahan Hasil pengesahan Hasil dalam pengesahan Hasil)

  {

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

  }

}

ValidationContext adalah kelas yang memberi anda konteks di mana pengesahan harus dilakukan. Kaedah statik TryValidateObject dari kelas Validator kembali benar jika pengesahan berjaya, salah sebaliknya. Ia juga mengembalikan senarai ValidationResults yang memperincikan semua pengesahan yang gagal pada model. Akhirnya, kami telah menggunakan gelung foreach untuk mengulangi senarai ValidationResults dan memaparkan mesej ralat di tetingkap konsol.

Penyenaraian kod lengkap diberikan di bawah untuk rujukan anda.

Pengarang kelas awam

    {

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

        [Panjang String (50, Panjang Minimum = 3,

        ErrorMessage = "Nama Pertama hendaklah minimum 3 aksara dan maksimum 50 aksara")]

        [DataType (DataType.Text)]

        rentetan awam FirstName {get; menetapkan; }

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

        [Panjang String (50, Panjang Minimum = 3,

        ErrorMessage = "Nama Akhir hendaklah minimum 3 aksara dan maksimum 50 aksara")]

        [DataType (DataType.Text)]

        rentetan umum LastName {get; menetapkan; }

        [Jenis Data (DataType.PhoneNumber)]

        [Telefon]

        tali nombor telefon awam {get; menetapkan; }

        [Jenis Data (DataType.EmailAddress)]

        [Alamat emel]

        rentetan awam E-mel {get; menetapkan; }

    }

    Program kelas

    {      

        kekosongan statik Utama (string [] args)

        {

            Pengarang pengarang = Pengarang baru ();

            pengarang.FirstName = "Joydip";

            pengarang.LastName = ""; // Tiada nilai yang dimasukkan

            pengarang.PhoneNumber = "1234567890";

            pengarang.Email = "[email protected]";

            ValidationContext konteks = ValidationContext baru

            (pengarang, null, null);

            Menyenaraikan validasiResults = baru

            Senarai ();

            bool valid = Validator.TryValidateObject

            (pengarang, konteks, validasiResults, true);

            jika (! sah)

            {

                foreach (ValidationResult validationResult in

                Keputusan pengesahan)

                {

                    Console.WriteLine ("{0}",

                    validationResult.ErrorMessage);

                }

            }

            Konsol.ReadKey ();

        }

    }

Semasa anda menjalankan program, anda akan melihat mesej ralat berikut yang dipaparkan di tetingkap konsol:

Nama Akhir diperlukan

Buat atribut pengesahan tersuai di C #

Untuk membuat kelas atribut pengesahan tersuai, anda harus melanjutkan kelas asas ValidationAttribute dan mengganti kaedah IsValid seperti yang ditunjukkan dalam coretan kod yang diberikan di bawah.

[AttributeUsage (AttributeTargets.Property, AllowMultiple = false, Diwarisi = salah)]

kelas awam IsEmptyAttribute: ValidationAttribute

 {

    bile override awam IsValid (nilai objek)

     {

         var inputValue = nilai sebagai rentetan;

         return! string.IsNullOrEmpty (inputValue);

     }

 }

Coretan kod berikut menggambarkan bagaimana anda boleh menggunakan atribut khusus untuk menghiasi sifat FirstName dan LastName kelas Author.

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

rentetan awam FirstName {get; menetapkan; }

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

rentetan umum LastName {get; menetapkan; }

Anotasi data diperkenalkan pada mulanya di .NET 3.5 sebagai sebahagian daripada Sistem. KomponenModel. Ruang nama DataAnnotations. Sejak itu mereka menjadi ciri yang banyak digunakan di .NET. Anda boleh memanfaatkan anotasi data untuk menentukan peraturan pengesahan data di satu tempat dan dengan itu mengelakkan daripada menulis semula kod pengesahan yang sama berulang kali.

Dalam catatan yang akan datang di sini, kita akan melihat bagaimana anotasi data dapat digunakan dalam aplikasi ASP.NET Core MVC untuk melakukan pengesahan model.

Bagaimana untuk melakukan lebih banyak perkara di C #

  • Bilakah menggunakan kelas abstrak vs antara muka dalam C #
  • Cara bekerja dengan AutoMapper di C #
  • Cara menggunakan ungkapan lambda dalam C #
  • Cara bekerjasama dengan delegasi Action, Func, dan Predicate di C #
  • Cara bekerja dengan perwakilan di C #
  • Cara melaksanakan pembalak sederhana di C #
  • Cara bekerja dengan atribut di C #
  • Cara bekerja dengan log4net di C #
  • Cara melaksanakan corak reka bentuk repositori di C #
  • Cara bekerja dengan refleksi di C #
  • Cara bekerja dengan pemantau sistem fail di C #
  • Cara melakukan inisial malas di C #
  • Cara bekerja dengan MSMQ di C #
  • Cara bekerja dengan kaedah peluasan di C #
  • Bagaimana untuk kami ungkapan lambda dalam C #
  • Bilakah menggunakan kata kunci tidak stabil dalam C #
  • Cara menggunakan kata kunci hasil dalam C #
  • Cara melaksanakan polimorfisme dalam C #
  • Bagaimana membina penjadual tugas anda sendiri di C #
  • Cara bekerja dengan RabbitMQ di C #
  • Cara bekerja dengan tuple di C #
  • Meneroka kaedah maya dan abstrak dalam C #