Condividi tramite


Parte 5, usare un database in un'app MVC core ASP.NET

Nota

Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 9 di questo articolo.

Avviso

Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.

Importante

Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.

Per la versione corrente, vedere la versione .NET 9 di questo articolo.

Di Rick Anderson e Jon P Smith.

L'oggetto MvcMovieContext gestisce l'attività di connessione al database e di mapping degli oggetti Movie ai record di database. Il contesto del database viene registrato con il contenitore Dependency Injection nel Program.cs file:

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

Il sistema di configurazione ASP.NET Core legge la ConnectionString chiave. Per lo sviluppo locale, ottiene la stringa di connessione dal file appsettings.json:

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

Avviso

Questo articolo usa un database locale che non richiede l'autenticazione dell'utente. Le app di produzione devono usare il flusso di autenticazione più sicuro disponibile. Per altre informazioni sull'autenticazione per le app di test e produzione distribuite, vedere Proteggere i flussi di autenticazione.

SQL Server Express LocalDB

Local DB:

  • Versione leggera del motore di database SQL Server Express, installata per impostazione predefinita con Visual Studio.
  • Inizia su richiesta usando un stringa di connessione.
  • È destinato allo sviluppo di programmi. Viene eseguito in modalità utente, quindi non esiste una configurazione complessa.
  • Per impostazione predefinita, crea .mdf file nella directory C:/Users/{user}.

Esaminare il database

Dal menu Visualizzazione aprire Esplora oggetti di SQL Server (SSOX).

Fare clic con il pulsante destro del mouse sulla Movie tabella (dbo.Movie) > Visualizzazione Designer

Fare clic con il pulsante destro del mouse sulla tabella Film > Visualizza Progettazione.

Tabella Movie aperta nella finestra di progettazione

Si noti l'icona a forma di chiave accanto a ID. Per impostazione predefinita, EF crea una proprietà denominata ID chiave primaria.

Fare clic con il pulsante destro del mouse sulla Movie tabella > Visualizza dati

Fare clic con il pulsante destro del mouse sulla tabella > Visualizza Dati del Film.

Tabella dei film aperta con i dati

Specificare il valore di inizializzazione del database

Creare una nuova classe denominata SeedData nella cartella Models. Sostituire il codice generato con il seguente:

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();
        }
    }
}

Se nel database sono presenti film, l'inizializzatore restituisce e non vengono aggiunti film.

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

Aggiungere l'inizializzatore del seme

Sostituire il contenuto di Program.cs con il codice seguente. Il nuovo codice è evidenziato.

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();

Eliminare tutti i record nel database. È possibile eseguire questa operazione con i collegamenti di eliminazione nel browser o da SSOX.

Test dell'app. Forzare l'inizializzazione dell'app, chiamando il codice nel Program.cs file, in modo che venga eseguito il metodo di inizializzazione. Per forzare l'inizializzazione, chiudere la finestra del prompt dei comandi aperta da Visual Studio e riavviare premendo CTRL+F5.

L'app mostra i dati predefiniti.

App Movie MVC aperta in Microsoft Edge che mostra i dati dei film

L'oggetto MvcMovieContext gestisce l'attività di connessione al database e di mapping degli oggetti Movie ai record di database. Il contesto del database viene registrato nel contenitore di Dependency Injection nel file Program.cs.

var builder = WebApplication.CreateBuilder(args);

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

Il sistema di Configurazione di ASP.NET Core legge la chiave ConnectionString. Per lo sviluppo locale, ottiene la stringa di connessione dal file appsettings.json.

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

Avviso

Questo articolo usa un database locale che non richiede l'autenticazione dell'utente. Le app di produzione devono usare il flusso di autenticazione più sicuro disponibile. Per altre informazioni sull'autenticazione per le app di test e produzione distribuite, vedere Proteggere i flussi di autenticazione.

SQL Server Express LocalDB

LocalDB:

  • Versione leggera del motore di database SQL Server Express, installata per impostazione predefinita con Visual Studio.
  • Inizia su richiesta usando un stringa di connessione.
  • È destinato allo sviluppo del programma. Viene eseguito in modalità utente, quindi non esiste una configurazione complessa.
  • Per impostazione predefinita, crea .mdf file nella directory C:/Users/{user}.

Esaminare il database

Dal menu Visualizzazione aprire Esplora oggetti di SQL Server (SSOX).

Fare clic con il pulsante destro del mouse sulla Movie tabella (dbo.Movie) > Visualizza Progettista

Fare clic con il pulsante destro del mouse sulla tabella Film > Progettazione viste.

Tabella Movie aperta nella finestra di progettazione

Si noti l'icona a forma di chiave accanto a ID. Per impostazione predefinita, EF crea una proprietà denominata ID chiave primaria.

Fare clic con il pulsante destro del mouse sulla Movie tabella > Visualizza dati

Fare clic con il pulsante destro del mouse sulla tabella > Visualizza dati (Visualizzare dati).

Tabella Movie aperta con i dati della tabella

Riempire il database con dati iniziali

Creare una nuova classe denominata SeedData nella cartella Models. Sostituire il codice generato con il seguente:

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();
        }
    }
}

Se nel database sono presenti film, l'inizializzatore restituisce e non vengono aggiunti film.

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

Aggiungere un seed initializer

Sostituire il contenuto di Program.cs con il codice seguente. Il nuovo codice è evidenziato.

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();

Eliminare tutti i record nel database. È possibile eseguire questa operazione con i collegamenti di eliminazione nel browser o da SSOX.

Test dell'app. Forzare l'inizializzazione dell'applicazione, chiamando il codice nel file Program.cs, in modo che venga eseguito il metodo di seeding. Per forzare l'inizializzazione, chiudere la finestra del prompt dei comandi aperta da Visual Studio e riavviare premendo CTRL+F5.

L'app mostra i dati inizializzati.

App Movie MVC aperta in Microsoft Edge che mostra i dati dei film

L'oggetto MvcMovieContext gestisce l'attività di connessione al database e di mapping degli oggetti Movie ai record di database. Il contesto del database viene registrato con il contenitore Dependency Injection nel Program.cs file:

var builder = WebApplication.CreateBuilder(args);

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

Il sistema di configurazione di ASP.NET Core legge laConnectionStringchiave. Per lo sviluppo locale, ottiene la stringa di connessione dal file appsettings.json.

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

Avviso

Questo articolo usa un database locale che non richiede l'autenticazione dell'utente. Le app di produzione devono usare il flusso di autenticazione più sicuro disponibile. Per altre informazioni sull'autenticazione per le app di test e produzione distribuite, vedere Proteggere i flussi di autenticazione.

SQL Server Express LocalDB

Local DB:

  • Versione leggera del motore di database SQL Server Express, installata per impostazione predefinita con Visual Studio.
  • Inizia su richiesta usando un stringa di connessione.
  • È destinato allo sviluppo di programmi. Viene eseguito in modalità utente, quindi non esiste una configurazione complessa.
  • Per impostazione predefinita, crea .mdf file nella directory C:/Users/{user}.

Esaminare il database

Dal menu Visualizzazione aprire Esplora oggetti di SQL Server (SSOX).

Fare clic con il pulsante destro del mouse sulla Movie tabella (dbo.Movie) > Visualizza progettazione

Fare clic con il pulsante destro del mouse sulla tabella dei film > Visualizzazione struttura.

Tabella Movie aperta nella finestra di progettazione

Si noti l'icona a forma di chiave accanto a ID. Per impostazione predefinita, EF crea una proprietà denominata ID chiave primaria.

Fare clic con il pulsante destro del mouse sulla Movie tabella > Visualizza dati

Fare clic con il pulsante destro del mouse sulla tabella > Film Visualizza dati.

Tabella Movie aperta con i dati della tabella

Specificare il valore di inizializzazione del database

Creare una nuova classe denominata SeedData nella cartella Models. Sostituire il codice generato con il seguente:

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();
        }
    }
}

Se nel database sono presenti film, l'inizializzatore restituisce e non vengono aggiunti film.

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

<a name=snippet_"si">

Aggiungere l'inizializzatore del seed

Sostituire il contenuto di Program.cs con il codice seguente. Il nuovo codice è evidenziato.

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();

Eliminare tutti i record nel database. È possibile eseguire questa operazione con i collegamenti di eliminazione nel browser o da SSOX.

Test dell'app. Forzare l'inizializzazione dell'app, chiamando il codice nel file Program.cs, in modo che venga eseguito il metodo seed. Per forzare l'inizializzazione, chiudere la finestra del prompt dei comandi aperta da Visual Studio e riavviare premendo CTRL+F5.

L'app mostra i dati predefiniti.

App Movie MVC aperta in Microsoft Edge che mostra i dati dei film

L'oggetto MvcMovieContext gestisce l'attività di connessione al database e di mapping degli oggetti Movie ai record di database. Il contesto del database viene registrato con il contenitore Dependency Injection nel file Program.cs.

var builder = WebApplication.CreateBuilder(args);

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

Il sistema di Configuration di ASP.NET Core legge la chiave ConnectionString. Per lo sviluppo locale, ottiene la stringa di connessione dal file appsettings.json.

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

Avviso

Questo articolo usa un database locale che non richiede l'autenticazione dell'utente. Le app di produzione devono usare il flusso di autenticazione più sicuro disponibile. Per altre informazioni sull'autenticazione per le app di test e produzione distribuite, vedere Proteggere i flussi di autenticazione.

SQL Server Express LocalDB

LocalDB:

  • Versione leggera del motore di database SQL Server Express, installata per impostazione predefinita con Visual Studio.
  • Inizia su richiesta usando un stringa di connessione.
  • È destinato allo sviluppo del programma. Viene eseguito in modalità utente, quindi non esiste una configurazione complessa.
  • Per impostazione predefinita, crea .mdf file nella directory C:/Users/{user}.

Specificare il valore di inizializzazione del database

Creare una nuova classe denominata SeedData nella cartella Models. Sostituire il codice generato con il seguente:

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();
            }
        }
    }
}

Se nel database sono presenti film, l'inizializzatore restituisce e non vengono aggiunti film.

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

Aggiungere l'inizializzatore del seme

Sostituire il contenuto di Program.cs con il codice seguente. Il nuovo codice è evidenziato.

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();

Eliminare tutti i record nel database. È possibile eseguire questa operazione con i collegamenti di eliminazione nel browser o da SSOX.

Test dell'app. Forza l'inizializzazione dell'applicazione, chiamando il codice nel file Program.cs, in modo che venga eseguito il metodo seed. Per forzare l'inizializzazione, chiudere la finestra del prompt dei comandi aperta da Visual Studio e riavviare premendo CTRL+F5.

L'app mostra i dati pre-caricati.

App Movie MVC aperta in Microsoft Edge che mostra i dati dei film

L'oggetto MvcMovieContext gestisce l'attività di connessione al database e di mapping degli oggetti Movie ai record di database. Il contesto del database viene registrato con il contenitore Dependency Injection nel ConfigureServices metodo nel Startup.cs file :

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

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

Il sistema di configurazione di ASP.NET Core legge laConnectionString chiave. Per lo sviluppo locale, ottiene la stringa di connessione dal file appsettings.json.

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

Avviso

Questo articolo usa un database locale che non richiede l'autenticazione dell'utente. Le app di produzione devono usare il flusso di autenticazione più sicuro disponibile. Per altre informazioni sull'autenticazione per le app di test e produzione distribuite, vedere Proteggere i flussi di autenticazione.

SQL Server Express LocalDB

Local DB:

  • Versione leggera del motore di database SQL Server Express, installata per impostazione predefinita con Visual Studio.
  • Inizia su richiesta usando un stringa di connessione.
  • È destinato allo sviluppo di programmi. Viene eseguito in modalità utente, quindi non esiste una configurazione complessa.
  • Per impostazione predefinita, crea .mdf file nella directory C:/Users/{user}.

Esaminare il database

Dal menu Visualizzazione aprire Esplora oggetti di SQL Server (SSOX).

Menu Visualizza

Fare clic con il pulsante destro del Movie mouse sulla tabella > Visualizzatore Designer delle viste

Fare clic con il pulsante destro del mouse sulla tabella film > Visualizza struttura

Tabella dei film aperta in Designer

Si noti l'icona a forma di chiave accanto a ID. Per impostazione predefinita, EF crea una proprietà denominata ID chiave primaria.

Fare clic con il pulsante destro del mouse sulla Movie tabella > Visualizza dati

Fare clic con il pulsante destro del mouse sulla tabella > Movie View Data

Tabella dei film aperta mostrando i dati della tabella

Specificare il valore di inizializzazione del database

Creare una nuova classe denominata SeedData nella cartella Models. Sostituire il codice generato con il seguente:

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();
            }
        }
    }
}

Se nel database sono presenti film, l'inizializzatore termina e non vengono aggiunti film.

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

Aggiungere l'inizializzatore del seed

Sostituire il contenuto di Program.cs con il codice seguente:

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>();
                });
    }
}

Test dell'app.

Eliminare tutti i record nel database. È possibile eseguire questa operazione con i collegamenti di eliminazione nel browser o da SSOX.

Forzare l'inizializzazione dell'app, chiamando i metodi nella Startup classe , in modo che venga eseguito il metodo di inizializzazione. Per forzare l'inizializzazione, IIS Express deve essere arrestato e riavviato. È possibile eseguire questa operazione adottando uno degli approcci seguenti:

  • Fare clic con il pulsante destro del mouse sull'icona dell'area di notifica di IIS Express e toccare Esci o Arresta sito:

    Icona dell'area di notifica di IIS Express

    Menu di scelta rapida

    • Se Visual Studio è in esecuzione in modalità non di debug, premere F5 per attivare la modalità di debug
    • Se Visual Studio è in esecuzione in modalità di debug, arrestare il debugger e premere F5

L'app mostra i dati predefiniti.

App Movie MVC aperta in Microsoft Edge che mostra i dati dei film