Fermer

octobre 6, 2020

.NET MVC Framework – Appel de DbContext dans le contrôleur à l'aide de DTO et de fournisseurs


Bonjour! Dans cette partie de la série de didacticiels, j'expliquerai comment vous pouvez transmettre des données de la base de données à la vue à l'aide de DTO et de fournisseurs.

Présentation

1) Créer des DTO (objets de transfert de données) dans '03 – Domaine> Modèles dossier '.

 classe publique CustomerDto {
    public int ID {get; ensemble; }
    chaîne publique Name {get; ensemble; }
    public string Email {get; ensemble; }
} 
  • Les DTO sont comme des modèles où nous définissons des propriétés avec des getters et des setters.
  • Comme leur nom l'indique, les DTO sont utilisés à la place des modèles réels pour «transférer des données» vers le contrôleur.

2) Créer un fournisseur classes dans lesquelles nous appellerons les méthodes DbContext et async.

  • Dans ces méthodes async, nous appelons DbContext et stockons les données dans les DTO.
  • Ces méthodes async seront appelées dans le contrôleur pour être transmises à la vue

Par où nous allons commencer

Dans la partie 1 de ce didacticiel, j'ai expliqué comment vous pourriez construire la structure de dossiers pour le projet ASP.NET MVC intégrant le framework d'entité de base de données. Dans la partie 2, j'ai expliqué comment vous pouvez publier la base de données et procéder à l'ingénierie inverse pour créer des modèles dbset. Voici la structure de dossiers à partir de laquelle nous allons commencer en nous basant sur les didacticiels précédents:

 Bp4 P1

Détails

1) Ajoutez une classe «CustomerDto» sous le dossier «03 – Domaine> Modèles ». Ajoutez les propriétés (champs) dont vous avez besoin pour les données.

 Bp4 P2

Dans cette structure de dossiers dans laquelle je travaille, remarquez comment le CustomerDto est stocké dans le dossier Models sous '03 – Domaine ', tandis que le modèle réel Clients est stocké dans le dossier Modèles sous '04 – Base de données' (reportez-vous à la deuxième image).

 Bp4 P3

** N'oubliez pas! Nous devons remplacer la méthode DbContext.OnConfiguring (DbContextOptionsBuilder) dans le DatabaseContext pour configurer la base de données à utiliser dans ce contexte.

  • Ceci configure la connexion à la base de données à l'aide de la chaîne de connexion configurée dans web.config. En d'autres termes, nous devons ajouter la chaîne de connexion dans le fichier web.config si nous ne l'avons pas!

 Bp4 P4

 Bp4 P5

À l'intérieur de la chaîne de connexion , la source de données est le nom du serveur (par exemple ou localhost), le catalogue initial est le nom de la table avec laquelle nous interagissons, Integrated Security = True nous permet d'accéder à la base de données à l'aide de l'authentification Windows. Il existe des ressources en ligne, dont celle-ci que j'ai trouvée: https://blog.elmah.io/the-ultimate-guide-to-connection-strings-in-web-config/

2) Maintenant, nous pouvons ajoutez une classe 'CustomerProvider' sous le dossier '02 – Application> Providers '.

  • Declare the DbContext
  • Create constructors (constructor chaining is used) that will instantiate the DbContext using Dependency Injection

 Bp4 P6 [19659027] 3) Ajoutez une méthode GetCustomersAsync () qui stockera les données de DbContext dans une liste de CustomerDto à l'aide de LINQ.</p><ul><li> Task <> représente une opération unique qui s'exécute généralement de manière asynchrone.</li><li> Dans notre exemple, nous utilisons LINQ to .Select variable (Id, Name, & Email) pour stocker chacun d'eux dans les variables de l'objet CustomerDto. Nous utilisons la méthode .SingleOrDefaultAsync () pour renvoyer l'objet CustomerDto.</li><li> .AsNoTracking () est utilisé de manière conventionnelle car les entités renvoyées seront mises en cache dans le DbContext par défaut, ce qui génère des erreurs lorsque nous appelons une entité à différents endroits au même time.</li></ul><div class=

 Covid 19

 Bp4 P8

Nous pouvons utiliser la méthode .ToListAsync () pour renvoyer une liste d'objets comme illustré ci-dessous.

 Bp4 P9

En cours de route, vous devrez peut-être installer packages (EntityFrameworkCore) pour ajouter une référence au DbSet.

 Bp4 P7

REMARQUE: Nous aurons besoin d'installer quelques packages Nuget pour utiliser la classe Task et SqlClient pour DbContext pour interagir avec le serveur Sql. Sans les installations, vous pourriez rencontrer des erreurs telles que «Impossible de charger le fichier ou l'assembly 'System.Threading.Tasks.Extensions'» comme celle illustrée ci-dessous:

 Bp4 P10

Pour installer ces packages Nuget, accédez au Gestionnaire de packages Console.

 Bp4 P11

Collez chacune de ces lignes dans 'PM>'

PM> Install-Package System.Threading.Tasks.Extensions -Version 4.5.4

PM> Install-Package Microsoft. Data.SqlClient -Version 2.1.0-preview1.20235.1

Référence:

https://www.nuget.org/packages/System.Threading.Tasks.Extensions/

https : //www.nuget.org/packages/Microsoft.Data.SqlClient/2.1.0-preview1.20235.1

C'est à peu près tout pour créer des DTO et des méthodes dans la classe du fournisseur. Maintenant, nous pouvons appeler la méthode depuis le contrôleur et la passer à la vue!

4) Dans nos exemples, nous utiliserons IndexController. Créez des constructeurs pour instancier les fournisseurs. Je peux appeler la méthode .GetCustomerAsync () que j'ai créée dans le fournisseur, la stocker dans une variable pour la transmettre à la vue.

 Bp4 P12

5) Voici comment notre page de rasoir et la vue ressemblera à ceci:

 Bp4 P13

 Bp4 P14 Extrait de la base de données Demo_01:

 Bp4 P15

À propos de l'auteur [19659057] David Hwang est consultant technique associé dans l'unité commerciale Sitecore / Microsoft. Il rédigera un blog sur divers concepts de technologies pour les débutants.

Plus de cet auteur






Source link

Revenir vers le haut