Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Esta não é a versão mais recente deste artigo. Para ver a versão atual, consulte a versão .NET 10 deste artigo.
Aviso
Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, consulte o .NET e .NET Core Support Policy. Para ver a versão atual, consulte a versão .NET 10 deste artigo.
Introdução
Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo MVC ASP.NET Core.
Você aprenderá a:
- Registre e configure o contexto do banco de dados Entity Framework Core para seu aplicativo MVC ASP.NET Core.
- Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
- Use SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando SQL Server Pesquisador de Objetos.
- Preencha seu banco de dados com dados de exemplo iniciais.
Pré-requisito
Este tutorial usa um banco de dados configurado na etapa anterior: Part 4, adicione um modelo a um aplicativo MVC ASP.NET Core.
Trabalhando com o contexto do banco de dados
O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado com o contêiner Injeção de dependência no arquivo 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.")));
O sistema ASP.NET Core Configuration lê a chave ConnectionString. Para desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Aviso
Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.
SQL Server Express LocalDB
LocalDB:
- É uma versão leve do SQL Server Express Mecanismo de Banco de Dados, instalado por padrão com Visual Studio.
- Inicia quando solicitado usando uma *cadeia de conexão*.
- É destinado ao desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
- Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.
Examinar o banco de dados
No menu View, abra SQL Server Pesquisador de Objetos (SSOX).
Clique com o botão direito do mouse na Movie tabela (dbo.Movie) > Exibir Designer
Observe o ícone de chave ao lado de ID. Por padrão, o EF tornará uma propriedade chamada ID a chave primária.
Clique com o botão direito na tabela Movie>Dados de Exibição
Propagar o banco de dados
Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:
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 houver filmes no banco de dados, o inicializador de sementes é acionado e nenhum filme é adicionado.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Adicionar o inicializador de semeadura
Substitua o conteúdo de Program.cs pelo seguinte código. O novo código está realçado.
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();
Testar o aplicativo. Force o aplicativo a inicializar, chamando o código no arquivo Program.cs, para que o método seed seja executado. Para forçar a inicialização, feche a janela do prompt de comando que o Visual Studio abriu e reinicie pressionando Ctrl+F5.
O aplicativo mostra os dados semeados.
E uma atualização da Movie tabela mostra os mesmos dados.
Observação
Talvez você não consiga inserir vírgulas decimais em campos decimais. Para dar suporte à validação do jQuery para localidades de idiomas diferentes do inglês que usam uma vírgula (“,”) para um ponto decimal e formatos de data diferentes do inglês dos EUA, você deve tomar medidas para globalizar o aplicativo. Veja este comentário 4076 do GitHub para instruções sobre a adição da vírgula decimal.
Introdução
Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo MVC ASP.NET Core.
Você aprenderá a:
- Registre e configure o contexto do banco de dados Entity Framework Core para seu aplicativo MVC ASP.NET Core.
- Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
- Use SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando SQL Server Pesquisador de Objetos.
- Preencha seu banco de dados com dados de exemplo iniciais.
Pré-requisito
Este tutorial usa um banco de dados configurado na etapa anterior: Part 4, adicione um modelo a um aplicativo MVC ASP.NET Core.
Trabalhando com o contexto do banco de dados
O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado no contêiner de Injeção de Dependência no arquivo 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.")));
O sistema ASP.NET Core Configuration lê a chave ConnectionString. Para desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Aviso
Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.
SQL Server Express LocalDB
LocalDB:
- É uma versão leve do SQL Server Express Mecanismo de Banco de Dados, instalado por padrão com Visual Studio.
- Inicia quando solicitado usando uma *cadeia de conexão*.
- É destinado ao desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
- Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.
Examinar o banco de dados
No menu View, abra SQL Server Pesquisador de Objetos (SSOX).
Clique com o botão direito do mouse na Movie tabela (dbo.Movie) > Exibir Designer
Observe o ícone de chave ao lado de ID. Por padrão, o EF tornará uma propriedade chamada ID a chave primária.
Clique com o botão direito na tabela Movie>Dados de Exibição
Inicializar o banco de dados
Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:
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 houver um filme no banco de dados, o inicializador de semeadura será retornado e nenhum filme será adicionado.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Adicionar o inicializador de semeadura
Substitua o conteúdo de Program.cs pelo seguinte código. O novo código está realçado.
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();
Exclua todos os registros no banco de dados. Faça isso com os links Excluir no navegador ou no SSOX.
Testar o aplicativo. Force o aplicativo a ser inicializado, chamando o código no arquivo Program.cs para que o método de semente seja executado. Para forçar a inicialização, feche a janela do prompt de comando que o Visual Studio abriu e reinicie pressionando Ctrl+F5.
O aplicativo mostra os dados semeados.
Observação
Talvez você não consiga inserir vírgulas decimais em campos decimais. Para dar suporte à validação do jQuery para localidades de idiomas diferentes do inglês que usam uma vírgula (“,”) para um ponto decimal e formatos de data diferentes do inglês dos EUA, você deve tomar medidas para globalizar o aplicativo. Veja este comentário 4076 no GitHub para obter instruções sobre como adicionar vírgula decimal.
Introdução
Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo MVC ASP.NET Core.
Você aprenderá a:
- Registre e configure o contexto do banco de dados Entity Framework Core para seu aplicativo MVC ASP.NET Core.
- Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
- Use SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando SQL Server Pesquisador de Objetos.
- Preencha seu banco de dados com dados de exemplo iniciais.
Pré-requisito
Este tutorial usa um banco de dados configurado na etapa anterior: Part 4, adicione um modelo a um aplicativo MVC ASP.NET Core.
Trabalhando com o contexto do banco de dados
O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado com o contêiner Injeção de dependência no arquivo Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
O sistema ASP.NET Core Configuration lê a chave ConnectionString. Para desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
Aviso
Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.
SQL Server Express LocalDB
LocalDB:
- É uma versão leve do SQL Server Express Mecanismo de Banco de Dados, instalado por padrão com Visual Studio.
- Inicia quando solicitado usando uma *cadeia de conexão*.
- É destinado ao desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
- Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.
Examinar o banco de dados
No menu View, abra SQL Server Pesquisador de Objetos (SSOX).
Clique com o botão direito do mouse na Movie tabela (dbo.Movie) > Exibir Designer
Observe o ícone de chave ao lado de ID. Por padrão, o EF tornará uma propriedade chamada ID a chave primária.
Clique com o botão direito na tabela Movie>Dados de Exibição
Inicializar o banco de dados
Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:
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 houver um filme no banco de dados, o inicializador de semeadura será retornado e nenhum filme será adicionado.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Adicionar o inicializador de semeadura
Substitua o conteúdo de Program.cs pelo seguinte código. O novo código está realçado.
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();
Exclua todos os registros no banco de dados. Faça isso com os links Excluir no navegador ou no SSOX.
Testar o aplicativo. Force o aplicativo a ser inicializado, chamando o código no arquivo Program.cs para que o método de semente seja executado. Para forçar a inicialização, feche a janela do prompt de comando que o Visual Studio abriu e reinicie pressionando Ctrl+F5.
O aplicativo mostra os dados semeados.
Observação
Talvez você não consiga inserir vírgulas decimais em campos decimais. Para dar suporte à validação do jQuery para localidades de idiomas diferentes do inglês que usam uma vírgula (“,”) para um ponto decimal e formatos de data diferentes do inglês dos EUA, você deve tomar medidas para globalizar o aplicativo. Veja este comentário 4076 no GitHub para obter instruções sobre como adicionar vírgula decimal.
Introdução
Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo MVC ASP.NET Core.
Você aprenderá a:
- Registre e configure o contexto do banco de dados Entity Framework Core para seu aplicativo MVC ASP.NET Core.
- Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
- Use SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando SQL Server Pesquisador de Objetos.
- Preencha seu banco de dados com dados de exemplo iniciais.
Pré-requisito
Este tutorial usa um banco de dados configurado na etapa anterior: Part 4, adicione um modelo a um aplicativo MVC ASP.NET Core.
Trabalhando com o contexto do banco de dados
O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado com o contêiner Injeção de dependência no arquivo Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
O sistema ASP.NET Core Configuration lê a chave ConnectionString. Para desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
Aviso
Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.
SQL Server Express LocalDB
LocalDB:
- É uma versão leve do SQL Server Express Mecanismo de Banco de Dados, instalado por padrão com Visual Studio.
- É iniciado sob demanda usando um cadeia de conexão.
- Destina-se ao desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
- Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.
Examinar o banco de dados
No menu View, abra SQL Server Pesquisador de Objetos (SSOX).
Clique com o botão direito do mouse na Movie tabela (dbo.Movie) > Designer de Exibição
Observe o ícone de chave ao lado de ID. Por padrão, o EF tornará uma propriedade chamada ID a chave primária.
Clique com o botão direito na tabela Movie>Dados de Exibição
Inicializar o banco de dados
Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:
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 houver um filme no banco de dados, o inicializador de semeadura será retornado e nenhum filme será adicionado.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
<a name=snippet_"si">
Adicionar o inicializador de semeadura
Substitua o conteúdo de Program.cs pelo seguinte código. O novo código está realçado.
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();
Exclua todos os registros no banco de dados. Faça isso com os links Excluir no navegador ou no SSOX.
Testar o aplicativo. Force o aplicativo a ser inicializado, chamando o código no arquivo Program.cs para que o método seed seja executado. Para forçar a inicialização, feche a janela do prompt de comando que o Visual Studio abriu e reinicie pressionando Ctrl+F5.
O aplicativo mostra os dados semeados.
Observação
Talvez você não consiga inserir vírgulas decimais em campos decimais. Para dar suporte à validação do jQuery para localidades de idiomas diferentes do inglês que usam uma vírgula (“,”) para um ponto decimal e formatos de data diferentes do inglês dos EUA, você deve tomar medidas para globalizar o aplicativo. Veja este comentário do GitHub 4076 para obter instruções sobre como adicionar vírgula decimal.
Introdução
Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo MVC ASP.NET Core.
Você aprenderá a:
- Registre e configure o contexto do banco de dados Entity Framework Core para seu aplicativo MVC ASP.NET Core.
- Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
- Use SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando SQL Server Pesquisador de Objetos.
- Preencha seu banco de dados com dados de exemplo iniciais.
Pré-requisito
Este tutorial usa um banco de dados configurado na etapa anterior: Part 4, adicione um modelo a um aplicativo MVC ASP.NET Core.
Trabalhando com o contexto do banco de dados
O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado com o contêiner Injeção de dependência no arquivo Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
O sistema ASP.NET Core Configuration lê a chave ConnectionString. Para desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Aviso
Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.
SQL Server Express LocalDB
LocalDB:
- É uma versão leve do SQL Server Express Mecanismo de Banco de Dados, instalado por padrão com Visual Studio.
- Inicia quando solicitado usando uma *cadeia de conexão*.
- É destinado ao desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
- Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.
Propagar o banco de dados
Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:
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 houver qualquer filme no banco de dados, o inicializador de seed retorna e nenhum filme será adicionado.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Adicionar o inicializador de semeadura
Substitua o conteúdo de Program.cs pelo seguinte código. O novo código está realçado.
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();
Exclua todos os registros no banco de dados. Você pode fazer isso com os links de exclusão no navegador ou a partir do SSOX.
Testar o aplicativo. Force o aplicativo a inicializar, chamando o código no arquivo Program.cs para que o método seed seja executado. Para forçar a inicialização, feche a janela do prompt de comando que o Visual Studio abriu e reinicie pressionando Ctrl+F5.
O aplicativo mostra os dados inicializados.
Observação
Talvez você não consiga inserir vírgulas decimais em campos decimais. Para dar suporte à validação do jQuery para localidades de idiomas diferentes do inglês que usam uma vírgula (“,”) para um ponto decimal e formatos de data diferentes do inglês dos EUA, você deve tomar medidas para globalizar o aplicativo. Veja este comentário no GitHub 4076 para obter instruções sobre como adicionar vírgula decimal.
Introdução
Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo MVC ASP.NET Core.
Você aprenderá a:
- Registre e configure o contexto do banco de dados Entity Framework Core para seu aplicativo MVC ASP.NET Core.
- Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
- Use SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando SQL Server Pesquisador de Objetos.
- Preencha seu banco de dados com dados de exemplo iniciais.
Pré-requisito
Este tutorial usa um banco de dados configurado na etapa anterior: Part 4, adicione um modelo a um aplicativo MVC ASP.NET Core.
Trabalhando com o contexto do banco de dados
O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado no contêiner de Injeção de Dependências no método ConfigureServices do arquivo Startup.cs.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
O sistema ASP.NET Core Configuration lê a chave ConnectionString. Para desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Aviso
Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.
SQL Server Express LocalDB
LocalDB:
- É uma versão leve do SQL Server Express Mecanismo de Banco de Dados, instalado por padrão com Visual Studio.
- Começa sob demanda usando uma cadeia de conexão.
- É direcionado para o desenvolvimento de software. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
- Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.
Examinar o banco de dados
Abra o menu View e abra o SQL Server Pesquisador de Objetos (SSOX).
Clique com o botão direito na tabela Movie>Exibir Designer
Observe o ícone de chave ao lado de ID. Por padrão, o EF tornará uma propriedade chamada ID a chave primária.
Clique com o botão direito na tabela Movie>Dados de Exibição
Propagar o banco de dados
Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:
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 houver filmes no banco de dados, o inicializador de sementes é acionado e nenhum filme é adicionado.
if (context.Movie.Any())
{
return; // DB has been seeded.
}
Adicionar o inicializador de semeadura
Substitua o conteúdo de Program.cs pelo seguinte código:
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>();
});
}
}
Testar o aplicativo.
Exclua todos os registros no banco de dados. Você pode fazer isso com os links de exclusão no navegador ou a partir do SSOX.
Force o aplicativo a inicializar, chamando os métodos na classe Startup para que o método seed seja executado. Para forçar a inicialização, o IIS Express deve ser interrompido e reiniciado. Faça isso com uma das seguintes abordagens:
Clique com botão direito do mouse no ícone na bandeja do sistema do IIS Express na área de notificação e toque em Sair ou em Parar site:
- Se você estiver executando o VS no modo sem depuração, pressione F5 para executar no modo de depuração
- Se você estiver executando o VS no modo de depuração, pare o depurador e pressione F5
O aplicativo mostra os dados semeados.
Observação
Talvez você não consiga inserir vírgulas decimais em campos decimais. Para dar suporte à validação do jQuery para localidades de idiomas diferentes do inglês que usam uma vírgula (“,”) para um ponto decimal e formatos de data diferentes do inglês dos EUA, você deve tomar medidas para globalizar o aplicativo. Veja este comentário 4076 do GitHub para instruções sobre a adição da vírgula decimal.