Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Problemas em BaseModel

Diferentemente da aula, criei uma classe para cada tabela minha no banco. Quando fui fazer a classe BaseRepository, tive que fazer a classe BaseModel, deixando-a desta forma: using System.Runtime.Serialization;

namespace CasaDoCodigo.Repositories { [DataContract] public abstract class BaseModel { [DataMember] public int Id { get; protected set; } } }

Porém, quando faço minha classe CadastroRepository(e as demais) herdarem de BaseRepository, obtenho um erro: "The type 'CasaDoCodigo.Models.Cadastro cannot be used as type parameter 'T' in the generic type or method BaseRepository.There's no implicit reference conversion from CasaDoCodigo.Models.Cadastro to CasaDoCodigo.Repositories.BaseModel'"

Tem como eu resolver esse problema sem ter que fazer como na aula? Digo, deixando uma classe para cada tabela sem estar tudo na classe modelo?

6 respostas

E agora obtenho esse erro: NullReferenceException: Object reference not set to an instance of an object. CasaDoCodigo.Repositories.PedidoRepository.GetPedidoId() in PedidoRepository.cs

Será que terei de fazer um novo banco? mas pelo que eu vi, todas as chaves estavam certinhas com o projeto do curso

Olá Roberta, tudo bem?

Na verdade não tem problemas em quebrar o seu modelo em outros arquivos, teoricamente é só separar o código como está na aula e nos novos arquivos, afinal, todos fazem parte do mesmo namespace.

Quanto ao segundo erro, você fez a injeção de um objeto do tipo IHttpContextAccessor num campo privado para o GetPedidoId() pegar a referência?

Só para saber, você tinha feito tudo da aula e depois quebrou o arquivo modelo.cs em um arquivo para cada classe?

No aguardo!

Minha propriedade e construtor ficaram assim:

private readonly IHttpContextAccessor contextAccessor;

    public PedidoRepository(ApplicationContext context, 
        IHttpContextAccessor contextAccessor) : base(context)
    {
        this.contextAccessor = contextAccessor;
    }

e um dos métodos do PedidoRepository ficou assim:

private int? GetPedidoId() {

        return contextAccessor.HttpContext.Session.GetInt32("pedidoId");

    }

Eu fiz todas as aulas, ai quando ele foi fazer o modelo.cs, eu já quebrei em classes, cada uma com uma classe. O construtor eu fiz desse jeito porque depois que eu tive esse erro, fui buscar no google uma solução e eu vi isso. Mas dai na hora de gravar no banco, fala que cadastro não aceita um campo null. No caso, para gravar no banco usa esse método do PedidoRepository:

public Pedido GetPedido() {

    var pedidoId = GetPedidoId();
        var pedido = dbSet.Where(p => p.Id == pedidoId).SingleOrDefault();

        if (pedido == null)
        {
            pedido = new Pedido();
            dbSet.Add(pedido);
            context.SaveChanges();
        }
        return pedido;
    }
solução!

Olha, pelo que eu acabei de pescar no erro da primeira dúvida, o BaseRepository tem o tipo T como um derivado de BaseModel e parece a classe Categoria não herda de `BaseModel.

Mas se o problema não for isso, me passa seu projeto via Dropbox, Google Drive ou Github, para que eu possa dar uma olhada. Assim facilita para encontrarmos uma solução.

No aguardo!

Era isso mesmo!!!! Muito obrigada

hahahaha juro que nessa eu estava meio desacreditado que realmente pudesse ser isso!

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software