7-3 Préparation à une première requête BD
Dans un premier temps, nous allons tenter de récupérer la liste complète des événements afin de les afficher. Pour obtenir et afficher la liste des événements (action Index()
), il nous faudra:
- Obtenir le
Connection String
pour accéder à la base de données - Créer une connexion à la BD
- Effectuer une requête permettant de récupérer les événements et les associer au modèle
Evenement
. - Afficher les événements de la liste dans une vue
Support convention de nommage PostgreSQL
Dans nos modèles, nous utilisons la convention de nommage .NET en PascalCase
(par exemple, VilleId
ou ImagePath
). Cependant, en Postgres, la convention est snake_case
(par exemple, ville_id
ou image_path
). Si on veut que le lien puisse se faire entre le retour de la base de données et notre modèle, il faut configurer Dapper adéquatement.
Il existe une configuration Dapper que vous pouvez ajouter à votre program.cs
:
builder.Services.AddMigrations(configuration.GetConnectionString("AppDatabaseConnection")!);
// Dapper match underscores: nom_propriete_underscore <-> NomProprieteUnderscore
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
Obtenir le ConnectionString
Si vous vous rappelez, pour les migrations, on obtient le ConnectionString à partir d'un objet configuration
dans Program.cs
.
En .NET, ce qu'on appelle ConnectionString est une string
identifiant les informations de connexion à la base de données.
On configure cette dernière dans appsettings.json.
Il est important de noter que plusieurs versions de appsettings.json peuvent exister. En effet, les informations de connexion de la base de données en développement vs celles de production (live) ne sont pas les mêmes.
Nous utiliserons appsettings.Development.json pour le développement. .NET s'occupe de récupérer le bon fichier en fonction de l'environnement.
Obtenir ConfigurationManager
par injection de dépendances
Il est possible d'utiliser l'injection de dépendances pour obtenir cet objet de configuration dans le contrôleur via un constructeur. Nous verrons plus tard comment injecter nos propres dépendances, et nous en apprendrons un peu plus sur l'injection de dépendances, mais pour l'instant l'objet ConfigurationManager (implémentant IConfiguration) devrait déjà être présent pour l’injection, gracieuseté du framework.
Il peut donc être utilisé comme paramètre de constructeur et le framework nous fournira la dépendance (objet déjà instancié).
public class EvenementsController : Controller
{
private IConfiguration _configuration;
private string _connectionString;
public EvenementsController(IConfiguration configuration)
{
_configuration = configuration;
_connectionString = _configuration.GetConnectionString("AppDatabaseConnection")!;
}
//...
Écrire la requête à la base de données
Dans la fonction Index()
, nous allons premièrement écrire la requête SQL. Cette dernière est assez simple pour commencer puisqu'on veut retourner tous les événements.
[Route("/")]
public IActionResult Index()
{
string sql = @"
SELECT * from evenements;
";
return View(new List<Evenement>());
}
Avec Dapper, les requêtes SQL seront écrites directement dans le code, sous forme de string
. Évidemment, nous sortirons ces requêtes des contrôleurs, mais le principe demeurera le même.
On peut utiliser @
pour définir une chaine de caractère sur plusieurs lignes. À ne pas confondre avec la syntaxe Razor, qui utilise le même symbole, mais qui a un rôle différent.
Cela sera particulièrement pratique pour écrire nos requêtes SQL sans avoir à manuellement concaténer des lignes avec "+"
.
Donc, même si la requête est simple et peut tenir sur une seule ligne, prenons l'habitude d'utiliser @
dès qu'on veut définir une requête SQL.
Modifier le dialecte
Vous avez probablement remarqué que Rider vous surligne en jaune la requête avec un message comme quoi une source de données n'est pas configurée, ainsi qu'un dialecte.
- Dans l'aide contextuelle, cliquez sur
Change dialect to...
. - Configurer à PostgreSQL le dialecte du projet.
- Cliquer sur
Save
Configurer la source de données de Rider (si pas déjà fait)
Si ce n'est pas déjà fait, ajoutez votre base de données comme source de données avec l'aide contextuelle de Rider...
- Cliquer sur
Configure Data source
- Cliquer sur le "+" pour ajouter une source de données
- Choisir PostgreSQL dans la liste
- Configurer la connexion à votre BD
- Cliquer sur
OK
Refresh schema
Si vous avez une erreur du genre Unable to resolve table 'evenements'
...
Cliquez sur More action...
et faire Refresh schema
.
Vous devriez maintenant avoir accès à l'autocomplétion pour écrire vos requêtes de base de données! 🎉