Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 10 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.
Di Rick Anderson e Jon P Smith.
Introduzione
Questa parte della serie di esercitazioni è incentrata sull'uso di un database SQL nell'applicazione MVC core ASP.NET.
Verrà descritto come:
- Registrare e configurare il contesto del database di Entity Framework Core per l'app ASP.NET Core MVC.
- Usare le stringhe di connessione del database per lo sviluppo locale.
- Usare SQL Server Express LocalDB per lo sviluppo ed esaminare il database e i dati usando Esplora oggetti di SQL Server.
- Eseguire il seeding del database con i dati di esempio iniziali.
Prerequisito
Questa esercitazione usa un database configurato nel passaggio precedente: Parte 4, aggiungere un modello a un'app MVC ASP.NET Core.
Uso del contesto del database
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 (database locale di SQL Server Express)
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
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
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.
Introduzione
Questa parte della serie di esercitazioni è incentrata sull'uso di un database SQL nell'applicazione MVC core ASP.NET.
Verrà descritto come:
- Registrare e configurare il contesto del database Entity Framework Core per l'app ASP.NET Core MVC.
- Usare le stringhe di connessione del database per lo sviluppo locale.
- Usare SQL Server Express LocalDB per lo sviluppo ed esaminare il database e i dati usando Esplora oggetti di SQL Server.
- Eseguire il seeding del database con i dati di esempio iniziali.
Prerequisito
Questa esercitazione usa un database configurato nel passaggio precedente: Parte 4, aggiungere un modello a un'app MVC ASP.NET Core.
Lavorare con il contesto del database
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 ASP.NET Core legge la ConnectionString chiave. 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 (database locale di SQL Server Express)
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
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
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. 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.
Introduzione
Questa parte della serie di esercitazioni è incentrata sull'uso di un database SQL nell'applicazione MVC core ASP.NET.
Verrà descritto come:
- Registrare e configurare il contesto del database di Entity Framework Core per l'app ASP.NET Core MVC.
- Usare le stringhe di connessione del database per lo sviluppo locale.
- Usare SQL Server Express LocalDB per lo sviluppo ed esaminare il database e i dati usando Esplora oggetti di SQL Server.
- Eseguire il seeding del database con i dati di esempio iniziali.
Prerequisito
Questa esercitazione usa un database configurato nel passaggio precedente: Parte 4, aggiungere un modello a un'app MVC ASP.NET Core.
Uso del contesto del database
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 ASP.NET Core legge la ConnectionString chiave. 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 (database locale di SQL Server Express)
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
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
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 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. 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.
Introduzione
Questa parte della serie di esercitazioni è incentrata sull'uso di un database SQL nell'applicazione MVC core ASP.NET.
Verrà descritto come:
- Registrare e configurare il contesto del database Entity Framework Core per l'app ASP.NET Core MVC.
- Usare le stringhe di connessione del database per lo sviluppo locale.
- Usare SQL Server Express LocalDB per lo sviluppo ed esaminare il database e i dati usando Esplora oggetti di SQL Server.
- Eseguire il seeding del database con i dati di esempio iniziali.
Prerequisito
Questa esercitazione usa un database configurato nel passaggio precedente: Parte 4, aggiungere un modello a un'app MVC ASP.NET Core.
Lavorare con il contesto del database
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 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-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 (database locale di SQL Server Express)
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}.
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. 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.
Introduzione
Questa parte della serie di esercitazioni è incentrata sull'uso di un database SQL nell'applicazione MVC core ASP.NET.
Verrà descritto come:
- Registrare e configurare il contesto del database di Entity Framework Core per l'app ASP.NET Core MVC.
- Usare le stringhe di connessione del database per lo sviluppo locale.
- Usare SQL Server Express LocalDB per lo sviluppo ed esaminare il database e i dati usando Esplora oggetti di SQL Server.
- Eseguire il seeding del database con i dati di esempio iniziali.
Prerequisito
Questa esercitazione usa un database configurato nel passaggio precedente: Parte 4, aggiungere un modello a un'app MVC ASP.NET Core.
Uso del contesto del database
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 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-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 (database locale di SQL Server Express)
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 Movie mouse sulla tabella > Visualizzatore Designer delle viste
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
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:
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:
- 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.