using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.ChangeTracking;
namespace Alura.Loja.Testes.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var promocaoDePascoa = new Promocao();
promocaoDePascoa.Descricao = "Páscoa Feliz";
promocaoDePascoa.DataInicio = DateTime.Now;
promocaoDePascoa.DataTermino = DateTime.Now.AddMonths(3); // Periodo da data atual até 3 meses
//promocaoDePascoa.Produtos.Add(new Produto());
//promocaoDePascoa.Produtos.Add(new Produto());
//promocaoDePascoa.Produtos.Add(new Produto());
using (var contexto = new LojaContext())
{
var serviceProvider = contexto.GetInfrastructure<IServiceProvider>();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
loggerFactory.AddProvider(SqlLoggerProvider.Create());
}
}
private static void ExibeEntries(IEnumerable<EntityEntry> entries)
{
foreach (var e in entries)
{
Console.WriteLine(e.Entity.ToString() + " - " + e.State);
}
}
}
}
// Classe Promocao
using System;
using System.Collections.Generic;
namespace Alura.Loja.Testes.ConsoleApp
{
public class Promocao
{
public int Id { get; set; }
public string Descricao { get; internal set; }
public DateTime DataInicio { get; internal set; }
public DateTime DataTermino { get; internal set; }
public IList<PromocaoProduto> Produtos { get; internal set; }
}
}
// Classe Produto
using System.Collections.Generic;
namespace Alura.Loja.Testes.ConsoleApp
{
public class Produto
{
public int Id { get; internal set; }
public string Nome { get; internal set; }
public string Categoria { get; internal set; }
public double PrecoUnitario { get; internal set; }
public string Unidade { get; set; }
public IList<PromocaoProduto> Promocoes { get; set; }
public override string ToString()
{
return $"Produto: {this.Id}, {this.Nome}, {this.Categoria}, {this.PrecoUnitario} ";
}
}
}
//Classe LojaContext
using Microsoft.EntityFrameworkCore;
using System;
namespace Alura.Loja.Testes.ConsoleApp
{
/// Primeiramente faremos com que a classe permita usar a API do Entity dentro dela.
/// Para que isso aconteça, faremos a classe herdar de DbContext.(nameSpace = Microsoft.EntityFrameworkCore)
class LojaContext : DbContext
{
public DbSet<Produto> Produtos { get; set; }
public DbSet<Compra> Compras { get; set; }
public DbSet<Promocao> Promocoes { get; set; }
public LojaContext()
{
}
/// Definindo qual é o banco e qual é o endereço.
/// Sobrescrevendo o método OnConfiguring() da classe DbContext.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
/// Esse método tem como argumento de entrada, um construtor de opções.
/// Usando o optionsBuilder chamaremos o método UseSqlServer(), passando
/// como argumento o endereço do banco que usamos no ProdutoDAO
optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=LojaDB;Trusted_Connection=true;");
}
}
}
// Classe IProdutoDAO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Alura.Loja.Testes.ConsoleApp
{
interface IProdutoDAO
{
void Adicionar(Produto p);
void Atualizar(Produto p);
void Remover(Produto p);
IList<Produto> Produtos();
}
}
//Classe Compra
namespace Alura.Loja.Testes.ConsoleApp
{
internal class Compra
{
public int Id { get; set; }
public int Quantidade { get; internal set; }
public Produto Produto { get; internal set; }
public int ProdutoId { get; set; }
public double Preco { get; internal set; }
public Compra()
{
}
}
}