O ORM padrão do .NET Core chama Entity Framework Core (EF). Existem basicamente 4 modos de trabalhar com o EF:
- O modo model-first, em que o programador desenha um modelo EDM com as ferramentas do Visual Studio e depois gera o banco de dados e as classes.
- O modo database-first em que o banco de dados já existe e o programador utiliza o Visual Studio para gerar o modelo EDM a partir do banco.
- O modo code-first em que o programador desenha as classes diretamente via código e depois gera o banco de dados.
- O modo code-first from existing database em que o programador usa o Visual Studio para gerar o código das classes diretamente sem gerar o modelo EDM.
Cada modo tem suas vantagens e desvantagens. Nesse desafio, embora existe um banco de dados já pronto, vamos utilizá-lo apenas como referência e utilizar o modo code-first que é o modo mais flexível de todos.
O desafio contém um projeto pré-configurado para usar o Entity Framework Core com banco de dados SQL Server LocalDB.
Nessa imagem de um modelo ER você encontrará um Modelo Entidade-Relacionamento de um banco de dados utilizado pela Codenation que servirá de referência para construir as classes. Para concluir esse desafio você irá criar as classes que representam cada entidade e cada relacionamento do Modelo ER.
-
As classes devem ser construídas na pasta
Models
do projetoSource
. -
A classe de
DBContext
chamadaCodenationContext
já é fornecida junto ao projeto e deve ser mantida porque será utilizadas para os testes. -
É fornecida uma classe de testes básica de exemplo que usa o
CodenationContext
para investigar os metadados gerados no modelo. Você deve complementar os testes criando novas classes de testes baseado nesse exemplo. -
O modelo ER não apresenta a informação se os campos aceitam ou não valores nulos e você deve admitir que todos os campos não aceitam valores nulos.
-
Para a tradução dos tipos de dado entre o banco e as classes, utilize:
timestamp
:DateTime
varchar
:string
int
:int
float
:decimal
(tamanho 9,2)
-
O modelo ER apresenta as chaves estrangeiras porém não indica quais navegações
1..*
devem ser configuradas. Dessa forma admita que todas chaves estrangeiras requerem uma navegações1..*
na classe que representa a entidade pai. Abaixo a lista das navegações que serão checadas:- Entidade
User
: navegação paraCandidate
eSubmission
- Entidade
Acceleration
: navegação paraCandidate
- Entidade
Company
: navegação paraCandidate
- Entidade
Challenge
: navegação paraAcceleration
eSubmission
- Entidade
No Entity Framework Core existem dois modos para fazer o mapeamento entre as classes e o banco de dados. Através de atributos que são chamados Data Annotations
ou através do Model Builder
utilizando Fluent API
. A primeira forma é aplicada diretamente na classe e a segunda forma é feita ou através de classes de configuração ou através de código diretamente no método OnModelCreating
do DBContext
. Algumas configurações no entanto, como a definição de chave primária composta, por exemplo, só são possíveis com o Fluent API
, por isso você pode adotar uma forma mista de configuração, se preferir.
Embora o modelo final irá representar o banco de dados e você pode utilizar uma característica do EF chamada Migrations
para criar o banco de dados, para esse desafio não é preciso fazer isso e nem existir o banco de dados físico, basta que as classes reflitam o Modelo ER.
A avaliação irá checar:
- Nome de tabelas e colunas
- Tipos das colunas
- Colunas não nulas
- Tamanho das colunas
- Relacionamento entre tabelas (chave estrangeiras)
- Navegações