Partie 5, utiliser une base de données dans une application MVC ASP.NET Core

Remarque

Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 10 de cet article.

Avertissement

Cette version de ASP.NET Core n’est plus prise en charge. Pour plus d’informations, consultez la Politique de support .NET et .NET Core. Pour la version actuelle, consultez la version .NET 10 de cet article.

Présentation

Cette partie de la série de tutoriels se concentre sur l’utilisation d’une base de données SQL dans votre application MVC ASP.NET Core.

Vous découvrirez comment :

  • Inscrivez et configurez le contexte de base de données Entity Framework Core pour votre application MVC ASP.NET Core.
  • Utiliser des chaînes de connexion de base de données pour le développement local.
  • Utilisez SQL Server Express LocalDB pour le développement et examinez votre base de données et vos données à l’aide de SQL Server Explorateur d'objets.
  • Amorçage de votre base de données avec des exemples de données initiaux.

Prérequis

Ce tutoriel utilise une base de données que vous avez configurée à l’étape précédente : Part 4, ajoutez un modèle à une application MVC ASP.NET Core.

Utilisation du contexte de base de données

L’objet MvcMovieContext gère la tâche de connexion à la base de données et de mappage d’objets Movie à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur Injection de dépendances dans le fichier Program.cs.

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

Le système ASP.NET Core Configuration lit la clé ConnectionString. Pour le développement local, il obtient le chaîne de connexion à partir du fichier appsettings.json :

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

SQL Server Express LocalDB

Base de données locale :

  • Version légère de l’Moteur de base de données Express SQL Server, installée par défaut avec Visual Studio.
  • Démarre à la demande à l’aide d'une chaîne de connexion.
  • Est destiné au développement de programmes. Elle s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe.
  • Par défaut, crée des fichiers .mdf dans le répertoire C:/Users/{utilisateur}.

Examiner la base de données

Dans le menu View, ouvrez SQL Server Explorateur d'objets (SSOX).

Cliquez avec le bouton droit sur la table Movie (dbo.Movie) > Concepteur de vue

Cliquez avec le bouton droit sur la table Film > dans le Concepteur de vues.

Tableau de films ouvert dans le Designer.

Notez l’icône de clé en regard de ID. Par défaut, EF fait d’une propriété nommée ID la clé primaire.

Cliquez avec le bouton droit sur la table Movie> Afficher les données.

Cliquez avec le bouton droit sur la table Movie > puis choisissez Voir les données.

Le tableau des films est ouvert sans afficher de données.

Amorcer la base de données

Créez une classe nommée SeedData dans l’espace de noms Modèles. Remplacez le code généré par ce qui suit :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Ajouter l'initialiseur de graine

Remplacez le contenu de Program.cs par le code suivant. Le nouveau code est mis en évidence.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.MapStaticAssets();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}")
    .WithStaticAssets();

app.Run();

Testez l’application. Forcez l’application à s’initialiser en exécutant le code dans le fichier Program.cs, pour que la méthode seed s’exécute. Pour forcer l’initialisation, fermez la fenêtre d’invite de commandes qui Visual Studio ouverte, puis redémarrez en appuyant sur Ctrl+F5.

L'application affiche les données préremplies.

MVC Movie s’ouvre dans Microsoft Edge affichant des données de film.

Et une actualisation de la Movie table affiche les mêmes données.

La table de films contient des données initiales.

Remarque

Vous ne pourrez peut-être pas entrer de virgules décimales dans les champs décimaux. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que l’anglais qui utilisent une virgule (« , ») comme décimale et des formats de date autres que l’anglais des États-Unis, vous devez effectuer des étapes pour localiser votre application. Voir ce commentaire GitHub 4076 pour obtenir des instructions sur l’ajout de la virgule décimale.

Présentation

Cette partie de la série de tutoriels se concentre sur l’utilisation d’une base de données SQL dans votre application MVC ASP.NET Core.

Vous découvrirez comment :

  • Inscrivez et configurez le contexte de base de données Entity Framework Core pour votre application MVC ASP.NET Core.
  • Utiliser des chaînes de connexion de base de données pour le développement local.
  • Utilisez SQL Server Express LocalDB pour le développement et examinez votre base de données et vos données à l’aide de SQL Server Explorateur d'objets.
  • Amorçage de votre base de données avec des exemples de données initiaux.

Prérequis

Ce tutoriel utilise une base de données que vous avez configurée à l’étape précédente : Part 4, ajoutez un modèle à une application MVC ASP.NET Core.

Utilisation du contexte de base de données

L’objet MvcMovieContext gère la tâche de connexion à la base de données et de mappage d’objets Movie à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur Injection de dépendances dans le fichier Program.cs.

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

Le système ASP.NET Core Configuration lit la clé ConnectionString. Pour le développement local, il obtient le chaîne de connexion à partir du fichier appsettings.json :

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

SQL Server Express LocalDB

Base de données locale :

  • Version légère de l’Moteur de base de données Express SQL Server, installée par défaut avec Visual Studio.
  • Démarre à la demande à l’aide d’une chaîne de connexion.
  • Est destiné au développement de programmes. Elle s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe.
  • Par défaut, crée des fichiers .mdf dans le répertoire C:/Users/{utilisateur}.

Examiner la base de données

Dans le menu View, ouvrez SQL Server Explorateur d'objets (SSOX).

Cliquez avec le bouton droit sur la table Movie (dbo.Movie) > Concepteur de vue

Cliquez avec le bouton droit sur la table Movie > Concepteur de vue.

Table Movie ouverte dans le Concepteur

Notez l’icône de clé en regard de ID. Par défaut, EF fait d’une propriété nommée ID la clé primaire.

Cliquez avec le bouton droit sur la table Movie> Afficher les données.

Cliquez avec le bouton droit sur la table Movie > Afficher les données.

Table Film ouverte, montrant les données de la table

Amorcer la base de données

Créez une classe nommée SeedData dans l’espace de noms Modèles. Remplacez le code généré par ce qui suit :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Ajouter l'initialiseur de graine

Remplacez le contenu de Program.cs par le code suivant. Le nouveau code est mis en évidence.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.MapStaticAssets();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Supprimez tous les enregistrements de la base de données. Pour ce faire, utilisez les liens de suppression disponibles dans le navigateur ou à partir de SSOX.

Testez l’application. Forcez l’application à s’initialiser en exécutant le code dans le fichier Program.cs, pour que la méthode seed s’exécute. Pour forcer l’initialisation, fermez la fenêtre d’invite de commandes qui Visual Studio ouverte, puis redémarrez en appuyant sur Ctrl+F5.

L'application affiche les données préremplies.

application MVC Movie ouverte dans Microsoft Edge affichant des données de film

Remarque

Vous ne pourrez peut-être pas entrer de virgules décimales dans les champs décimaux. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que l’anglais qui utilisent une virgule (« , ») comme décimale et des formats de date autres que l’anglais des États-Unis, vous devez effectuer des étapes pour localiser votre application. Consultez ce commentaire GitHub 4076 pour obtenir des instructions sur l’ajout d'une virgule décimale.

Présentation

Cette partie de la série de tutoriels se concentre sur l’utilisation d’une base de données SQL dans votre application MVC ASP.NET Core.

Vous découvrirez comment :

  • Inscrivez et configurez le contexte de base de données Entity Framework Core pour votre application MVC ASP.NET Core.
  • Utiliser des chaînes de connexion de base de données pour le développement local.
  • Utilisez SQL Server Express LocalDB pour le développement et examinez votre base de données et vos données à l’aide de SQL Server Explorateur d'objets.
  • Amorçage de votre base de données avec des exemples de données initiaux.

Prérequis

Ce tutoriel utilise une base de données que vous avez configurée à l’étape précédente : Part 4, ajoutez un modèle à une application MVC ASP.NET Core.

Utilisation du contexte de base de données

L’objet MvcMovieContext gère la tâche de connexion à la base de données et de mappage d’objets Movie à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur Injection de dépendances dans le fichier Program.cs.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

Le système ASP.NET Core Configuration lit la clé ConnectionString. Pour le développement local, il obtient le chaîne de connexion à partir du fichier appsettings.json :

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

SQL Server Express LocalDB

Base de données locale :

  • Version légère de l’Moteur de base de données Express SQL Server, installée par défaut avec Visual Studio.
  • Démarre à la demande à l’aide d’une chaîne de connexion.
  • Est destiné au développement de programmes. Elle s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe.
  • Par défaut, crée des fichiers .mdf dans le répertoire C:/Users/{utilisateur}.

Examiner la base de données

Dans le menu View, ouvrez SQL Server Explorateur d'objets (SSOX).

Cliquez avec le bouton droit sur la table Movie (dbo.Movie) > Concepteur de vue

Cliquez avec le bouton droit sur la table Movie > Concepteur de vue.

Table Movie ouverte dans le Concepteur

Notez l’icône de clé en regard de ID. Par défaut, EF fait d’une propriété nommée ID la clé primaire.

Cliquez avec le bouton droit sur la table Movie> Afficher les données.

Cliquez avec le bouton droit sur la table Movie > Afficher les données.

Table Film ouverte, montrant les données de la table

Amorcer la base de données

Créez une classe nommée SeedData dans l’espace de noms Modèles. Remplacez le code généré par ce qui suit :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Ajouter l'initialiseur de graine

Remplacez le contenu de Program.cs par le code suivant. Le nouveau code est mis en évidence.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Supprimez tous les enregistrements de la base de données. Pour ce faire, utilisez les liens de suppression disponibles dans le navigateur ou à partir de SSOX.

Testez l’application. Forcez l’application à s’initialiser en exécutant le code dans le fichier Program.cs, pour que la méthode seed s’exécute. Pour forcer l’initialisation, fermez la fenêtre d’invite de commandes qui Visual Studio ouverte, puis redémarrez en appuyant sur Ctrl+F5.

L'application affiche les données préremplies.

Application MVC Movie ouverte dans Microsoft Edge affichant les informations du film

Remarque

Vous ne pourrez peut-être pas entrer de virgules décimales dans les champs décimaux. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que l’anglais qui utilisent une virgule (« , ») comme décimale et des formats de date autres que l’anglais des États-Unis, vous devez effectuer des étapes pour localiser votre application. Voir le commentaire GitHub 4076 pour obtenir des instructions sur l’ajout de la virgule décimale.

Présentation

Cette partie de la série de tutoriels se concentre sur l’utilisation d’une base de données SQL dans votre application MVC ASP.NET Core.

Vous découvrirez comment :

  • Inscrivez et configurez le contexte de base de données Entity Framework Core pour votre application MVC ASP.NET Core.
  • Utiliser des chaînes de connexion de base de données pour le développement local.
  • Utilisez SQL Server Express LocalDB pour le développement et examinez votre base de données et vos données à l’aide de SQL Server Explorateur d'objets.
  • Amorçage de votre base de données avec des exemples de données initiaux.

Prérequis

Ce tutoriel utilise une base de données que vous avez configurée à l’étape précédente : Part 4, ajoutez un modèle à une application MVC ASP.NET Core.

Utilisation du contexte de base de données

L’objet MvcMovieContext gère la tâche de connexion à la base de données et de mappage d’objets Movie à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur Injection de dépendances dans le fichier Program.cs.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

Le système ASP.NET Core Configuration lit la clé ConnectionString. Pour le développement local, il obtient le chaîne de connexion à partir du fichier appsettings.json :

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

SQL Server Express LocalDB

Base de données locale :

  • Version légère de l’Moteur de base de données Express SQL Server, installée par défaut avec Visual Studio.
  • Démarre à la demande à l’aide d'une chaîne de connexion.
  • Est destiné au développement de programmes. Elle s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe.
  • Par défaut, crée des fichiers .mdf dans le répertoire C:/Users/{utilisateur}.

Examiner la base de données

Dans le menu View, ouvrez SQL Server Explorateur d'objets (SSOX).

Cliquez avec le bouton droit sur la table Movie (dbo.Movie) > Concepteur de vue

Cliquez avec le bouton droit sur la table Movie > Concepteur de vue.

Table Movie ouverte dans le Concepteur

Notez l’icône de clé en regard de ID. Par défaut, EF fait d’une propriété nommée ID la clé primaire.

Cliquez avec le bouton droit sur la table Movie> Afficher les données.

Cliquez avec le bouton droit sur la table Movie > Afficher les données.

Table Film ouverte, montrant les données de la table

Amorcer la base de données

Créez une classe nommée SeedData dans l’espace de noms Modèles. Remplacez le code généré par ce qui suit :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

<a name=snippet_"si »>

Ajouter l'initialiseur de graine

Remplacez le contenu de Program.cs par le code suivant. Le nouveau code est mis en évidence.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Supprimez tous les enregistrements de la base de données. Pour ce faire, utilisez les liens de suppression disponibles dans le navigateur ou à partir de SSOX.

Testez l’application. Forcez l’application à s’initialiser en exécutant le code dans le fichier Program.cs, pour que la méthode seed s’exécute. Pour forcer l’initialisation, fermez la fenêtre d’invite de commandes qui Visual Studio ouverte, puis redémarrez en appuyant sur Ctrl+F5.

L'application affiche les données préremplies.

L'application MVC Movie ouverte dans Microsoft Edge affichant des informations de film

Remarque

Vous ne pourrez peut-être pas entrer de virgules décimales dans les champs décimaux. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que l’anglais qui utilisent une virgule (« , ») comme décimale et des formats de date autres que l’anglais des États-Unis, vous devez effectuer des étapes pour localiser votre application. Voir ce commentaire GitHub 4076 pour obtenir des instructions sur l’ajout de virgule décimale.

Présentation

Cette partie de la série de tutoriels se concentre sur l’utilisation d’une base de données SQL dans votre application MVC ASP.NET Core.

Vous découvrirez comment :

  • Inscrivez et configurez le contexte de base de données Entity Framework Core pour votre application MVC ASP.NET Core.
  • Utiliser des chaînes de connexion de base de données pour le développement local.
  • Utilisez SQL Server Express LocalDB pour le développement et examinez votre base de données et vos données à l’aide de SQL Server Explorateur d'objets.
  • Amorçage de votre base de données avec des exemples de données initiaux.

Prérequis

Ce tutoriel utilise une base de données que vous avez configurée à l’étape précédente : Part 4, ajoutez un modèle à une application MVC ASP.NET Core.

Utilisation du contexte de base de données

L’objet MvcMovieContext gère la tâche de connexion à la base de données et de mappage d’objets Movie à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur Injection de dépendances dans le fichier Program.cs.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

Le système ASP.NET Core Configuration lit la clé ConnectionString. Pour le développement local, il obtient le chaîne de connexion à partir du fichier appsettings.json :

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

SQL Server Express LocalDB

Base de données locale :

  • Version légère de l’Moteur de base de données Express SQL Server, installée par défaut avec Visual Studio.
  • Démarre à la demande à l’aide d’une chaîne de connexion.
  • Est destiné au développement de programmes. Elle s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe.
  • Par défaut, crée des fichiers .mdf dans le répertoire C:/Users/{utilisateur}.

Amorcer la base de données

Créez une classe nommée SeedData dans l’espace de noms Modèles. Remplacez le code généré par ce qui suit :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcMovieContext(
                serviceProvider.GetRequiredService<
                    DbContextOptions<MvcMovieContext>>()))
            {
                // Look for any movies.
                if (context.Movie.Any())
                {
                    return;   // DB has been seeded
                }

                context.Movie.AddRange(
                    new Movie
                    {
                        Title = "When Harry Met Sally",
                        ReleaseDate = DateTime.Parse("1989-2-12"),
                        Genre = "Romantic Comedy",
                        Price = 7.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters ",
                        ReleaseDate = DateTime.Parse("1984-3-13"),
                        Genre = "Comedy",
                        Price = 8.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters 2",
                        ReleaseDate = DateTime.Parse("1986-2-23"),
                        Genre = "Comedy",
                        Price = 9.99M
                    },

                    new Movie
                    {
                        Title = "Rio Bravo",
                        ReleaseDate = DateTime.Parse("1959-4-15"),
                        Genre = "Western",
                        Price = 3.99M
                    }
                );
                context.SaveChanges();
            }
        }
    }
}

Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Ajouter l'initialiseur de graine

Remplacez le contenu de Program.cs par le code suivant. Le nouveau code est mis en évidence.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Supprimez tous les enregistrements de la base de données. Pour ce faire, utilisez les liens de suppression disponibles dans le navigateur ou à partir de SSOX.

Testez l’application. Forcez l’application à s’initialiser en exécutant le code dans le fichier Program.cs, pour que la méthode seed s’exécute. Pour forcer l’initialisation, fermez la fenêtre d’invite de commandes qui Visual Studio ouverte, puis redémarrez en appuyant sur Ctrl+F5.

L'application affiche les données préremplies.

application MVC Movie ouverte dans Microsoft Edge affichant des données de film

Remarque

Vous ne pourrez peut-être pas entrer de virgules décimales dans les champs décimaux. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que l’anglais qui utilisent une virgule (« , ») comme décimale et des formats de date autres que l’anglais des États-Unis, vous devez effectuer des étapes pour localiser votre application. Voir ce commentaire GitHub 4076 pour obtenir des instructions sur l'ajout d'une virgule décimale.

Présentation

Cette partie de la série de tutoriels se concentre sur l’utilisation d’une base de données SQL dans votre application MVC ASP.NET Core.

Vous découvrirez comment :

  • Inscrivez et configurez le contexte de base de données Entity Framework Core pour votre application MVC ASP.NET Core.
  • Utiliser des chaînes de connexion de base de données pour le développement local.
  • Utilisez SQL Server Express LocalDB pour le développement et examinez votre base de données et vos données à l’aide de SQL Server Explorateur d'objets.
  • Amorçage de votre base de données avec des exemples de données initiaux.

Prérequis

Ce tutoriel utilise une base de données que vous avez configurée à l’étape précédente : Part 4, ajoutez un modèle à une application MVC ASP.NET Core.

Utilisation du contexte de base de données

L’objet MvcMovieContext gère la tâche de connexion à la base de données et de mappage d’objets Movie à des enregistrements de la base de données. Le contexte de base de données est inscrit auprès du conteneur Injection de dépendances dans la méthode ConfigureServices du fichier Startup.cs :

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}

Le système ASP.NET Core Configuration lit la clé ConnectionString. Pour le développement local, il obtient le chaîne de connexion à partir du fichier appsettings.json :

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Avertissement

Cet article utilise une base de données locale qui ne nécessite pas l’authentification des utilisateurs. Les applications de production doivent utiliser le flux d’authentification le plus sécurisé disponible. Pour plus d’informations sur l’authentification pour les applications de test et de production déployées, consultez Flux d’authentification sécurisés.

SQL Server Express LocalDB

Base de données locale :

  • Version légère de l’Moteur de base de données Express SQL Server, installée par défaut avec Visual Studio.
  • Démarre à la demande à l’aide d’une chaîne de connexion.
  • Est destiné au développement de programmes. Elle s’exécute en mode utilisateur, ce qui n’implique aucune configuration complexe.
  • Par défaut, crée des fichiers .mdf dans le répertoire C:/Users/{utilisateur}.

Examiner la base de données

Dans le menu View, ouvrez SQL Server Explorateur d'objets (SSOX).

Menu Affichage

Cliquez avec le bouton droit sur la table Movie> Concepteur de vue

Cliquez avec le bouton droit sur la table Movie > Concepteur de vue

Table Movie ouverte dans le Concepteur

Notez l’icône de clé en regard de ID. Par défaut, EF fait d’une propriété nommée ID la clé primaire.

Cliquez avec le bouton droit sur la table Movie> Afficher les données.

Cliquez avec le bouton droit sur la table Movie > Afficher les données

Table Film ouverte, montrant les données de la table

Amorcer la base de données

Créez une classe nommée SeedData dans l’espace de noms Modèles. Remplacez le code généré par ce qui suit :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcMovieContext(
                serviceProvider.GetRequiredService<
                    DbContextOptions<MvcMovieContext>>()))
            {
                // Look for any movies.
                if (context.Movie.Any())
                {
                    return;   // DB has been seeded
                }

                context.Movie.AddRange(
                    new Movie
                    {
                        Title = "When Harry Met Sally",
                        ReleaseDate = DateTime.Parse("1989-2-12"),
                        Genre = "Romantic Comedy",
                        Price = 7.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters ",
                        ReleaseDate = DateTime.Parse("1984-3-13"),
                        Genre = "Comedy",
                        Price = 8.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters 2",
                        ReleaseDate = DateTime.Parse("1986-2-23"),
                        Genre = "Comedy",
                        Price = 9.99M
                    },

                    new Movie
                    {
                        Title = "Rio Bravo",
                        ReleaseDate = DateTime.Parse("1959-4-15"),
                        Genre = "Western",
                        Price = 3.99M
                    }
                );
                context.SaveChanges();
            }
        }
    }
}

Si la base de données contient des films, l’initialiseur de valeur initiale retourne une valeur et aucun film n’est ajouté.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Ajouter l'initialiseur de graine

Remplacez le contenu de Program.cs par le code suivant :

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MvcMovie.Data;
using MvcMovie.Models;
using System;

namespace MvcMovie
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;

                try
                {
                    SeedData.Initialize(services);
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occurred seeding the DB.");
                }
            }

            host.Run();

        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

Testez l’application.

Supprimez tous les enregistrements de la base de données. Pour ce faire, utilisez les liens de suppression disponibles dans le navigateur ou à partir de SSOX.

Forcez l’application à s’initialiser en appelant les méthodes de la classe Startup, pour que la méthode seed s’exécute. Pour forcer l’initialisation, IIS Express doit être arrêté et redémarré. Pour cela, adoptez l’une des approches suivantes :

  • Cliquez avec le bouton droit sur l’icône de barre d’état système IIS Express dans la zone de notification, puis appuyez sur Quitter ou sur Arrêter le site :

    Icône de la barre d’état système IIS Express

    Menu contextuel

    • Si vous exécutiez Visual Studio en mode non-débogage, appuyez sur F5 pour l’exécuter en mode débogage.
    • Si vous exécutiez Visual Studio en mode débogage, arrêtez le débogueur et appuyez sur F5.

L'application affiche les données préremplies.

application MVC Movie ouverte dans Microsoft Edge, affichant des données de films

Remarque

Vous ne pourrez peut-être pas entrer de virgules décimales dans les champs décimaux. Pour prendre en charge la validation jQuery pour les paramètres régionaux autres que l’anglais qui utilisent une virgule (« , ») comme décimale et des formats de date autres que l’anglais des États-Unis, vous devez effectuer des étapes pour localiser votre application. Voir ce commentaire GitHub 4076 pour obtenir des instructions sur l’ajout de la virgule décimale.