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.
Dica
Esse conteúdo é um trecho do livro eletrônico, Blazor para Desenvolvedores do ASP NET Web Forms para o Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
O acesso a dados é o backbone de um aplicativo ASP.NET Web Forms. Se você estiver criando formulários para a Web, o que acontece com esses dados? Com os Web Forms, havia várias técnicas de acesso a dados que você poderia usar para interagir com um banco de dados:
- Fontes de dados
- ADO.NET
- Estrutura de Entidade
Fontes de dados eram controles que você poderia colocar em uma página do Web Forms e configurar como outros controles. O Visual Studio forneceu um conjunto amigável de caixas de diálogo para configurar e associar os controles às páginas do Web Forms. Os desenvolvedores que desfrutam de uma abordagem de "código baixo" ou "sem código" preferiram essa técnica quando o Web Forms foi lançado pela primeira vez.
ADO.NET é a abordagem de baixo nível para interagir com um banco de dados. Seus aplicativos podem criar uma conexão com o banco de dados com Comandos, Tabelas de Dados e Conjuntos de Dados para interagir. Em seguida, os resultados podem ser associados a campos na tela sem muito código. A desvantagem dessa abordagem foi que cada conjunto de objetos ADO.NET (ConnectionCommande DataTable) estava associado a bibliotecas fornecidas por um fornecedor de banco de dados. O uso desses componentes tornou o código rígido e difícil de migrar para um banco de dados diferente.
Estrutura de Entidade
O EF (Entity Framework) é a estrutura de mapeamento relacional de objeto de software livre mantida pelo .NET Foundation. Inicialmente lançado com o .NET Framework, o EF permite gerar código para conexões de banco de dados, esquemas de armazenamento e interações. Com essa abstração, você pode se concentrar nas regras de negócios do aplicativo e permitir que o banco de dados seja gerenciado por um administrador de banco de dados confiável. No .NET, você pode usar uma versão atualizada do EF chamada EF Core. O EF Core ajuda a gerar e manter as interações entre o código e o banco de dados com uma série de comandos disponíveis para você usando a dotnet ef ferramenta de linha de comando. Vamos dar uma olhada em alguns exemplos para fazer você trabalhar com um banco de dados.
Code First do EF
Uma maneira rápida de começar a criar suas interações de banco de dados é começar com os objetos de classe com os quais você deseja trabalhar. O EF fornece uma ferramenta para ajudar a gerar o código de banco de dados apropriado para suas classes. Essa abordagem é chamada de desenvolvimento "Code First". Considere a classe a seguir Product para um aplicativo de vitrine de exemplo que desejamos armazenar em um banco de dados relacional como o Microsoft SQL Server.
public class Product
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[MaxLength(4000)]
public string Description { get; set; }
[Range(0, 99999,99)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
}
O produto tem uma chave primária e três campos adicionais que seriam criados em nosso banco de dados:
- O EF identificará a
Idpropriedade como uma chave primária por convenção. -
Nameserá armazenado em uma coluna configurada para armazenamento de texto. O[Required]atributo que decora essa propriedade adicionará umanot nullrestrição para ajudar a impor esse comportamento declarado da propriedade. -
Descriptionserá armazenado em uma coluna configurada para armazenamento de texto e terá um comprimento máximo configurado de 4.000 caracteres, conforme determinado pelo[MaxLength]atributo. O esquema de banco de dados será configurado com uma coluna nomeadaMaxLengthusando o tipovarchar(4000)de dados. - A
Pricepropriedade será armazenada como moeda. O[Range]atributo gerará restrições apropriadas para impedir o armazenamento de dados fora dos valores mínimos e máximos declarados.
Precisamos adicionar essa Product classe a uma classe de contexto de banco de dados que define as operações de conexão e tradução com nosso banco de dados.
public class MyDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
A MyDbContext classe fornece a única propriedade que define o acesso e a tradução para a Product classe. Seu aplicativo configura essa classe para interação com o banco de dados usando as seguintes entradas no Startup método da ConfigureServices classe (ou local apropriado em Program.cs usando a builder.Services propriedade em vez de services):
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer("MY DATABASE CONNECTION STRING"));
O código anterior se conectará a um banco de dados do SQL Server com a cadeia de conexão especificada. Você pode colocar a cadeia de conexão em seu arquivo appsettings.json, em variáveis de ambiente ou em outros locais de armazenamento de configuração e substituir essa cadeia de caracteres embutida adequadamente.
Em seguida, você pode gerar a tabela de banco de dados apropriada para essa classe usando os seguintes comandos:
dotnet ef migrations add 'Create Product table'
dotnet ef database update
O primeiro comando define as alterações que você está fazendo no esquema de banco de dados como uma nova Migração de EF chamada Create Product table. Uma migração define como aplicar e remover suas novas alterações de banco de dados.
Depois de aplicado, você tem uma tabela simples Product em seu banco de dados e algumas novas classes adicionadas ao projeto que ajudam a gerenciar o esquema de banco de dados. Você pode encontrar essas classes geradas, por padrão, em uma nova pasta chamada Migrações. Quando você faz alterações na Product classe ou adiciona mais classes relacionadas que gostaria de interagir com seu banco de dados, é necessário executar os comandos de linha de comando novamente com um novo nome da migração. Esse comando gerará outro conjunto de classes de migração para atualizar seu esquema de banco de dados.
Database First do EF
Para bancos de dados existentes, você pode gerar as classes para o EF Core usando as ferramentas de linha de comando do .NET. Para estruturar as classes, use uma variação do seguinte comando:
dotnet ef dbcontext scaffold "CONNECTION STRING" Microsoft.EntityFrameworkCore.SqlServer -c MyDbContext -t Product -t Customer
O comando anterior se conecta ao banco de dados usando a cadeia de conexão especificada e o Microsoft.EntityFrameworkCore.SqlServer provedor. Uma vez conectada, uma classe de contexto de banco de dados nomeada MyDbContext é criada. Além disso, as classes de suporte são criadas para as tabelas Product e Customer que foram especificadas com as opções -t. Há muitas opções de configuração para esse comando gerar a hierarquia de classe apropriada para seu banco de dados. Para obter uma referência completa, consulte a documentação do comando.
Mais informações sobre o EF Core podem ser encontradas no site do Microsoft Docs.
Interagir com serviços Web
Quando ASP.NET foi lançado pela primeira vez, os serviços SOAP eram a maneira preferencial para servidores Web e clientes trocarem dados. Muita coisa mudou desde então, e as interações preferenciais com serviços mudaram para interações diretas do cliente HTTP. Com ASP.NET Core e Blazor, você pode registrar a configuração do seu HttpClient no Program.cs ou no Startup método da ConfigureServices classe. Use essa configuração quando precisar interagir com o ponto de extremidade HTTP. Considere o seguinte código de configuração:
// in Program.cs
builder.Services.AddHttpClient("github", client =>
{
client.BaseAddress = new Uri("http://api.github.com/");
// GitHub API versioning
client.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
// GitHub requires a user-agent
client.DefaultRequestHeaders.Add("User-Agent", "BlazorWebForms-Sample");
});
Sempre que precisar acessar dados do GitHub, crie um cliente com um nome de github. O cliente é configurado com o endereço base e os cabeçalhos de solicitação são definidos adequadamente. Injete o IHttpClientFactory nos componentes Blazor com a diretiva @inject ou um atributo [Inject] em uma propriedade. Crie seu cliente nomeado e interaja com os serviços usando a seguinte sintaxe:
@inject IHttpClientFactory factory
...
@code {
protected override async Task OnInitializedAsync()
{
var client = factory.CreateClient("github");
var response = await client.GetAsync("repos/dotnet/docs/issues");
response.EnsureStatusCode();
var content = await response.Content.ReadAsStringAsync();
}
}
Esse método retorna a cadeia de caracteres que descreve a coleção de problemas no repositório GitHub do dotnet/docs . Ele retorna conteúdo no formato JSON e é desserializado em objetos de problema do GitHub apropriados. Há várias maneiras pelas quais você pode configurar o HttpClientFactory para entregar objetos pré-configurados HttpClient. Tente configurar várias HttpClient instâncias com nomes e pontos de extremidade diferentes para os vários serviços Web com os quais você trabalha. Essa abordagem tornará suas interações com esses serviços mais fáceis de lidar em cada página. Para obter mais informações, consulte Fazer solicitações HTTP usando IHttpClientFactory.