none
Anotação em controller RRS feed

  • Pergunta

  • Olá, tenho uma aplicação web-api que trabalha com entity framework e 3 contextos e para instancia-los uso a classe abaixo

     public class AppDbContext <T> where T: DbContext, new()
     {
            public static T Instancia()
            {
                if (HttpContext.Current.Items[typeof(T)] == null)
                {
                    T t = new T();
                    HttpContext.Current.Items.Add(typeof(T), t);
                }

                return (T)HttpContext.Current.Items[typeof(T)];
            }

    }

    as classe que representam o negócio da app herdam de uma classe padrão, abaixo

    public class CRUDPadrao<T, U> where T : CRUDPadrao<T, U>
                                      where U: DbContext, new()
    {
        public DbContext ctx;

        public CRUDPadrao()
        {

    ctx = AppDbContext<U>.Instancia();   // aqui o contexto é criado

        }

        public virtual IQueryable<T> Listar()
        {
            return ctx.Set<T>();
        }

        public virtual void Incluir()
        {
            T entidade = (T) this;

            ctx.Set<T>().Add(entidade);
            ctx.SaveChanges();
        }

    ... e demais métodos do crud

    }

    então a classe de negócio ficaria assim, herdando de CRUDPadrao ... observe que o tipo do contexto é passado tb

            

    [Table("Localidade")]
    public class Cidade : CRUDPadrao<Cidade, TreinamentoDbContext>
    {
        [Column("Id_Localidade")]
        [Key]
        public int Id { get; private set; }

        [Column("Nome")]
        public string Nome { get; private set; }

    ...

    }

    o que gostaria de fazer era retirar da declaração da classe, no exemplo Cidade, o tipo do contexto e passar a especificação, se for possível, através de uma anotação no controller, então, ficaria mais ou menos assim:

    1) declaração da classe Cidade

    [Table("Localidade")]
    public class Cidade : CRUDPadrao<Cidade, ???>  // não sei bem como ficaria

    2) declaração do controller

    [CrudContexto(TreinamentoDbContext)]
    public class CidadeController : ApiController
    {

    ...

    }


    Tem como fazer isso ?

     

    quinta-feira, 24 de abril de 2014 13:36