Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 10 Próxima »

Criando o projeto

Para começarmos a trabalhar com Entity Framework Core temos que criar um projeto com suporte a .NET Core.

Para isso através do Visual Studio vamos criar nosso projeto acessando: File -> New -> Project -> .NET Standard -> Class Library.

Com o projeto criado vamos adicionar o seguinte pacote Tnf.App.EntityFrameworkCore disponível em https://www.myget.org/F/tnf/api/v3/index.json

Podemos agora começar a criar nosso contexto e entidades de nosso banco de dados.

Para isso vamos criar o módulo que fará a configuração do uso do Entity Framework Core.

EntityFrameworkCoreModule.cs
using Tnf.Reflection.Extensions;
using Tnf.App.EntityFrameworkCore;
using Tnf.Architecture.Domain;
using Tnf.Modules;
 
[DependsOn(
	typeof(DomainModule),
    typeof(TnfAppEntityFrameworkCoreModule))]
public class EntityFrameworkModule : TnfModule
{
	public override void Initialize()
	{
		IocManager.RegisterAssemblyByConvention(typeof(EntityFrameworkModule).GetAssembly());
	}
}

Podemos perceber em nosso módulo definido acima no atributo "DependsOn" fazendo referencia ao TnfAppEntityFrameworkCoreModule. Essa dependência comporta toda a estrutura necessária para a utilização do Entity Framework Core.

Definindo uma entidade

Agora podemos definir nossa entidade que representará a tabela:

Country.cs
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Tnf.Architecture.Dto;
using Tnf.AutoMapper;
using Tnf.Domain.Entities;
 
[AutoMap(typeof(CountryDto))]
[Table("Countries")]
public class Country : Entity
{
	public const int MaxNameLength = 256;
	[Required]
	[MaxLength(MaxNameLength)]
	public string Name { get; set; }
	public Country()
	{
	}
	public Country(int id, string name)
	{
		Id = id;
		Name = name;
	}
}

A definição de nossa tabela pode ser feita usando atributos como no exemplo acima ou utilizando a FluentAPI do proprio Entity Framework Core para definir colunas e tipos de dados.

Note que temos uma herança para a classe Entity do TNF. Por padrão essa herança define que a entidade tenha uma propriedade Id (int) como chave primária.

Para alterar o tipo da chave primaria a ser usada informe através do parâmetro genérico qual tipo será usado. Exemplo: public class Country : Entity<Guid>

O atributo presente no exemplo AutoMapAttribute é um wrapper do TNF para uso do framework AutoMapper que fará o mapeamento automático da nossa tabela para o seu Dto.

Definindo um contexto

Para trabalhar usando contextos do Entity Framework Core devemos definir a classe que fará o acesso e configuração de nossas entidades.

Para isso o próximo passo é definir o DbContext fazendo a herança do TnfDbContext:

SampleDbContext
using Microsoft.EntityFrameworkCore;
using Tnf.Architecture.EntityFrameworkCore.Entities;
using Tnf.EntityFrameworkCore;
 
public class SampleDbContext : TnfDbContext
{
	public DbSet<Country> Countries { get; set; }

	public ArchitectureDbContext(DbContextOptions<SampleDbContext> options)
		: base(options)
	{
	}
}

Com nosso contexto criado podemos agora utilizar o Entity Framework Core utilizando o contexto criado.

Criando um Repositório

Para trabalhar com repositórios no TNF você precisa definir um TnfDbContext necessariamente. Quando o repositório for criado ele utilizará o TnfDbContext definido para criá-lo.

Vamos criar um repositório para a entidade criada anteriormente em nosso exemplo:

ICountryRepository.cs
public interface ICountryRepository : IRepository<Country>
{
}

Como instalamos o pacote Tnf.App.EntityFrameworkCore e configuramos a dependência do módulo TnfAppEntityFrameworkCoreModule, ao utilizar o tipo ICountryRepository para a entidade "Country", nosso mecanismo de injeção de dependência está injetando o repositório padrão TnfRepositoryBase com suporte a métodos para realizar operações de CRUD e queries mais complexas.

Caso você precise de uma especialização para seu repositório com métodos que você queira definir, você pode utilizar a classe abstrata TnfRepositoryBase<TEntity, TPrimaryKey> e fazer a criação de seu repositório informando a entidade e qual é o tipo de sua chave primaria:

CustomCountryRepository.cs
public class CustomCountryRepository : TnfRepositoryBase<Country, int>, ICountryRepository
{
	public override void Delete(Country entity)
	{
		throw new NotImplementedException();
	}
	public override void Delete(int id)
	{
		throw new NotImplementedException();
	}
	public override IQueryable<Country> GetAll()
	{
		throw new NotImplementedException();
	}
	public override Country Insert(Country entity)
	{
		throw new NotImplementedException();
	}
	public override Country Update(Country entity)
	{
		throw new NotImplementedException();
	}
}
  • Sem rótulos