Aparece o seguinte erro , já tentei procurar no google mas não achei , se alguém puder ajudar segue o código…
using Dominio.Repositorio;
using Microsoft.EntityFrameworkCore;
using Repositorio.Contexto;
using Repositorio.Interfaces;
using SistemaVenda.Dominio.Entidades;
using System;
using System.Collections.Generic;
using System.Text;
namespace Repositorio.Entidades
{
public class RepositorioCategoria : Repositorio, IRepositorioCategoria
{
public RepositorioCategoria(ApplicationDbContext dbContext) : base(dbContext) { }
}
}
//o erro aparece no RepositorioCategoria em pontinhos
codigo da classe EntityBase
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Text;
namespace SistemaVenda.Dominio.Entidades { public class EntityBase
{
[Key]
public int? Codigo { get; set; }
}
}
namespace Dominio { public class EntityBase { public int Codigo; } }
Codigo da classe Categoria
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks;
namespace SistemaVenda.Dominio.Entidades { public class Categoria : EntityBase {
public string Descricao { get; set; }
public ICollection<Produto> Produtos { get; set; }
}
}
Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão
Erro CS0311 O tipo “SistemaVenda.Dominio.Entidades.Categoria” não pode ser usado como parâmetro de tipo “TEntidade” no tipo ou método genérico “Repositorio”. Não há conversão de referência implícita de “SistemaVenda.Dominio.Entidades.Categoria” em “Dominio.EntityBase”.
Oi obrigada, pois é…achei que o erro de repente vem da classe EntityBase que a classe Categoria está tendo dificuldade de puxar…mas esqueci de postar o código …aí segue
using Dominio;
using Dominio.Interfaces;
using Microsoft.EntityFrameworkCore;
using Repositorio.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Repositorio
{
public abstract class Repositorio<TEntidade> : DbContext, IRepositorio<TEntidade> //
where TEntidade : EntityBase, new()
{
DbContext Db;
public DbSet<TEntidade> DbSetContext;//protected
public Repositorio(DbContext dbcontext)
{
Db = dbcontext;
DbSetContext = Db.Set<TEntidade>();
}
public void Create(TEntidade Entity)
{
if(Entity.Codigo==null)
{ DbSetContext.Add(Entity); }
else
{Db.Entry(Entity).State = EntityState.Modified; }
SaveChanges();
}
public virtual void Delete(int id)
{
var ent = new TEntidade() { Codigo = id };
DbSetContext.Attach(ent);
DbSetContext.Remove(ent);
Db.SaveChanges();
}
public TEntidade Read(int id)
{
return DbSetContext.Where(x => x.Codigo == id).FirstOrDefault();
}
public virtual IEnumerable<TEntidade> Read()
{
return DbSetContext.AsNoTracking().ToList();
}
}
//
}
public abstract class Repositorio : DbContext, IRepositorio //
where TEntidade : EntityBase
Seu problema está aqui.
1º ponto: você não deve herdar o DbContext e sim receber uma instancia dele.
2º ponto: você não disse que seu repositório é uma classe genérica.
Ajustando isso, ficaria assim:
public abstract class Repositorio<TEntidade> : IRepositorio<TEntidade> where TEntidade : EntityBase
Me parece que você tem vários namespaces diferentes que contém a mesma classe.
Nas suas entidades, você está referenciando a classe EntityBase do namespace SistemaVenda.Dominio.Entidades e nos repositorios você procura por uma classe EntityBase que está no namespace Dominio.
Embora aparentemente elas tenham a mesma implementação, ainda são diferentes. Padronize isso, ou use de um lugar ou use de outro.
Alguns desses erros, são erros de sintaxe. Você terá de analisar o código e ver se consegue descobrir o que errou.