Programmering

Sådan bruges datanoteringer i C #

Datanoteringer (fås som en del af systemet. ComponentModel. DataAnnotations navneområde) er attributter, der kan anvendes på klasser eller klassemedlemmer til at specificere forholdet mellem klasser, beskrive, hvordan dataene skal vises i brugergrænsefladen og specificere valideringsregler. Denne artikel taler om dataanmærkninger, hvorfor de er nyttige, og hvordan de bruges i vores .NET Core-applikationer.

For at arbejde med kodeeksemplerne i denne artikel skal du have Visual Studio 2019 installeret i dit system. Hvis du ikke allerede har en kopi, kan du downloade Visual Studio 2019 her.

Opret et konsolapplikationsprojekt i Visual Studio 2019

Lad os først oprette et .NET Core Console Application-projekt i Visual Studio. Forudsat at Visual Studio 2019 er installeret i dit system, skal du følge nedenstående trin for at oprette et nyt .NET Core Console Application-projekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "Konsolapp (.NET Core)" fra listen over skabeloner, der vises.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt", der vises nedenfor, skal du angive navnet og placeringen for det nye projekt.
  6. Klik på Opret.

Dette opretter et nyt .NET Core-konsolapplikationsprojekt i Visual Studio 2019. Vi bruger dette projekt til at arbejde med datanoteringer i de efterfølgende afsnit i denne artikel.

Inkluder systemet. ComponentModel. DataAnnotations navneområde

For at arbejde med kodeeksemplerne i denne artikel, skal du inkludere systemet. ComponentModel. DataAnnotations navneområde i dit program.

Bemærk, at attributter bruges til at specificere metadata på en klasse eller en ejendom. Dataanmærkningsattributterne kan stort set klassificeres i følgende:

  • Valideringsattribut - Bruges til at håndhæve valideringsregler for enhedernes egenskaber
  • Displayattribut - Bruges til at angive, hvordan dataene skal vises i brugergrænsefladen
  • Modelleringsattribut - Bruges til at specificere det forhold, der findes mellem klasser

Datanoteringer tilskriver klasser i C #

System.ComponentModel.Annotations navneområdet omfatter flere attributklasser, der kan bruges til at definere metadata til dine enhedsklasser eller datakontroller. De mest anvendte attributter inkluderer følgende:

  • ConcurrencyCheck
  • Nøgle
  • MaxLængde
  • Påkrævet
  • StringLength
  • Tidsstempel

Eksempel på datanoteringer i C #

Opret følgende klasse i en fil med navnet Author.cs i konsolapplikationen, vi har oprettet tidligere.

offentlig klasse Forfatter

    {

[Påkrævet (ErrorMessage = "{0} er påkrævet")]

[StringLength (50, MinimumLength = 3,

ErrorMessage = "Fornavn skal være mindst 3 tegn og maksimalt 50 tegn")]

[DataType (DataType.Text)]

offentlig streng Fornavn {get; sæt; }

[Påkrævet (ErrorMessage = "{0} er påkrævet")]

[StringLength (50, MinimumLength = 3,

ErrorMessage = "Efternavn skal være mindst 3 tegn og maksimalt 50 tegn")]

[DataType (DataType.Text)]

public string LastName {get; sæt; }

[DataType (DataType.PhoneNumber)]

[Telefon]

offentlig streng Telefonnummer {get; sæt; }

[DataType (DataType.EmailAddress)]

[Email adresse]

public string Email {get; sæt; }

    }

Følgende kodestykke illustrerer, hvordan du kan oprette en forekomst af klassen Forfatter og tildele værdier til dens egenskaber.

Forfatterforfatter = ny forfatter ();

author.FirstName = "Joydip";

author.LastName = "";

author.PhoneNumber = "1234567890";

author.Email = "[email protected]";

Du kan skrive følgende kodestykke i hovedmetoden til Program.cs-filen for at validere din model.

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

Liste validationResults = ny liste ();

bool valid = Validator.TryValidateObject (author, context, validationResults, true);

hvis (! gyldig)

{

foreach (ValidationResult validationResult i validationResults)

  {

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

  }

}

ValidationContext er den klasse, der giver dig den kontekst, hvor valideringen skal udføres. Den statiske metode TryValidateObject i Validator-klassen returnerer true, hvis valideringen er vellykket, ellers falsk. Det returnerer også en liste over ValidationResults, der beskriver alle valideringer, der har mislykkedes på modellen. Endelig har vi brugt en foreach-løkke til at gentage listen over ValidationResults og vise fejlmeddelelserne i konsolvinduet.

Den komplette kodeliste er angivet nedenfor til din reference.

offentlig klasse Forfatter

    {

[Påkrævet (ErrorMessage = "{0} er påkrævet")]

[StringLength (50, MinimumLength = 3,

ErrorMessage = "Fornavn skal være mindst 3 tegn og maksimalt 50 tegn")]

[DataType (DataType.Text)]

offentlig streng Fornavn {get; sæt; }

[Påkrævet (ErrorMessage = "{0} er påkrævet")]

[StringLength (50, MinimumLength = 3,

ErrorMessage = "Efternavn skal være mindst 3 tegn og maksimalt 50 tegn")]

[DataType (DataType.Text)]

public string LastName {get; sæt; }

[DataType (DataType.PhoneNumber)]

[Telefon]

offentlig streng Telefonnummer {get; sæt; }

[DataType (DataType.EmailAddress)]

[Email adresse]

public string Email {get; sæt; }

    }

klasse Program

    {      

statisk ugyldigt Main (streng [] args)

        {

Forfatterforfatter = ny forfatter ();

author.FirstName = "Joydip";

author.LastName = ""; // Ingen værdi indtastet

author.PhoneNumber = "1234567890";

author.Email = "[email protected]";

ValidationContext context = ny ValidationContext

(forfatter, null, null);

Liste validationResults = ny

Liste();

bool valid = Validator.TryValidateObject

(forfatter, kontekst, valideringResultater, sand);

hvis (! gyldig)

            {

foreach (ValidationResult validationResult i

validationResults)

                {

Console.WriteLine ("{0}",

validationResult.ErrorMessage);

                }

            }

Console.ReadKey ();

        }

    }

Når du udfører programmet, skal du se følgende fejlmeddelelse vises i konsolvinduet:

Efternavn er påkrævet

Opret en brugerdefineret valideringsattribut i C #

For at oprette en brugerdefineret valideringsattributklasse skal du udvide ValidationAttribute-baseklassen og tilsidesætte IsValid-metoden som vist i kodestykket nedenfor.

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

offentlig klasse IsEmptyAttribute: ValidationAttribute

 {

offentlig tilsidesættelse af bool IsValid (objektværdi)

     {

var inputValue = værdi som streng;

return! string.IsNullOrEmpty (inputValue);

     }

 }

Følgende kodestykke illustrerer, hvordan du kan bruge den brugerdefinerede attribut til at dekorere egenskaberne FirstName og LastName af forfatterklassen.

[IsEmpty (ErrorMessage = "Bør ikke være null eller tom.")]

offentlig streng Fornavn {get; sæt; }

[IsEmpty (ErrorMessage = "Bør ikke være null eller tom.")]

public string LastName {get; sæt; }

Datanoteringer blev oprindeligt introduceret i .NET 3.5 som en del af systemet. ComponentModel. DataAnnotations navneområde. Siden da er de blevet en meget brugt funktion i .NET. Du kan drage fordel af dataanmærkninger til at definere datavalideringsregler på et enkelt sted og derved undgå at skulle omskrive den samme valideringskode igen og igen.

I et fremtidigt indlæg her ser vi på, hvordan datanotering kan bruges i ASP.NET Core MVC-applikationer til at udføre modelvalidering.

Sådan gør du mere i C #

  • Hvornår skal man bruge en abstrakt klasse vs. interface i C #
  • Sådan arbejder du med AutoMapper i C #
  • Sådan bruges lambda-udtryk i C #
  • Sådan arbejder du med Action-, Func- og Predicate-delegerede i C #
  • Sådan arbejder du med delegerede i C #
  • Sådan implementeres en simpel logger i C #
  • Sådan arbejder du med attributter i C #
  • Sådan arbejder du med log4net i C #
  • Sådan implementeres depotdesignmønsteret i C #
  • Sådan arbejder du med refleksion i C #
  • Sådan arbejder du med filsystemwatcher i C #
  • Sådan udføres doven initialisering i C #
  • Sådan arbejder du med MSMQ i C #
  • Sådan arbejder du med udvidelsesmetoder i C #
  • Hvordan vi lambda-udtryk i C #
  • Hvornår skal du bruge det flygtige nøgleord i C #
  • Sådan bruges afkastnøgleordet i C #
  • Sådan implementeres polymorfisme i C #
  • Sådan bygger du din egen opgaveplanlægning i C #
  • Sådan arbejder du med RabbitMQ i C #
  • Sådan arbejder du med en tuple i C #
  • Udforskning af virtuelle og abstrakte metoder i C #