none
Melhor forma de Select + Where em EF e Parâmetros via Get RRS feed

  • Pergunta

  • Boa noite.

    Criei um método para enviar um valor CHAVE em uma tabela de registros de empresas e o sistema deve validar se a chave passada é válida.

    Para verificar se existe eu fiz da forma abaixo:

    public Registro RetornarRegistroPorChave(string pChave)
    {
      var Data = _Contexto.DbRegistro.Where(f => f.Chave == pChave);
      if (Data.Count().Equals(0))
        return null;
      else
        return Data.First();
    }

    Estou em dúvida se esta é a melhor forma de fazer esta simples query.  Estou iniciando em EF.

    Outra dúvida.  Na controladora Login, onde este método acima é chamado, caso o parâmetro EMPRESA não seja passado eu defino um padrão.

    No PHP com Zend Framework eu passo assim:

    /login/login/empresa/TESTE

    Porém no ASP.Net MVC apenas consigo pegar enviando /login/login?empresa=TESTE

    Tem como parâmetros serem passados como no Zend?  Terei que mexer manualmente em todas as rotas?

    Obrigado por tudo!

    sábado, 17 de novembro de 2012 00:41

Todas as Respostas

  • Você pode fazer assim:

    var data = _Contexto.DbRegistro.Where(f => f.Chave == pChave).ToList();
    
    return data.Count > 0 ? data[0] : null;

    E na rota você pode configurar assim:

    routes.MapRoute(
        name: "a",
        url: "login/login/{empresa}/{chave}",
        defaults: new { controller = "Login", action = "Login",empresa = "teste", chave = UrlParameter.Optional}
    );

    e na action:

            public ActionResult Login(string chave,string empresa)
            {
                return View();
            }

    Agora, se você acessar /login/login/?chave=aaa

    Você terá a variavel empresa na sua action = "teste"


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    sábado, 17 de novembro de 2012 01:06
  • Olá Murilo.  Obrigado por toda ajuda para um iniciante.  Faço buscas sempre antes de perguntar mas não estou acostumado com os termos então nem sempre consigo encontrar.

    Agora me veio uma dúvida quanto a tipos de modelo.  Por exemplo tenho tabela Usuario com campo Login e Senha.  Ok tudo certo.   

    Mas para eu fazer uma validação com Razor, então vejo a necessidade de criar um modelo Login com Usuario, Senha e Chave para minha validação.  Baseado nesses campos é que vou fazer a autenticação do usuário.

    Este modelo Login eu deixo junto com outros em Models?  Vejo este como um Modelo de Domínio onde é parte da regra do negócio e não especificamente quanto ao fornecimento de dados.   Há um padrão de nome ou outra pasta (Models.Domain talvez) para esta separação?

    Eu ia fazer o login (estou trazendo as views do Zend para o ASP.Net MVC e vou refazendo, está sendo muito rápido) pegando parametro do Form tal mas decidi fazer fortemente tipado para utilizar o MVC conforme ele foi construído.

    Muito obrigado.

    sábado, 17 de novembro de 2012 02:26
  • Romulo, não se preocupe em fazer perguntas, é normal isso hehe.

    Os models como você disse são models de dominio, portanto eu gosto de colocar em um projeto separado dentro de uma pasta chamada Domain, mas isso é só a minha opnião. Se você pesquisar pela internet vai achar várias formas de fazer isso inclusive uma de deixar tudo na pasta Model padrão(neste caso a reutilizão dos models em outro projeto torna-se ruim pois você terá que referenciar um projeto web inteiro).

    Quanto aos parametros, eu costumo criar uma classe na pasta Model mesmo com todas os dados que serão enviados da view para o servidor, mas novamente, isso é só a minha opnião:

    public class UserLogin
    {
         [Required(ErrorMessage = "login é obrigatório")]
         public string Login {get;set;}
         [Required(ErrorMessage("Password é obrigatório"))]
         public string Password {get;set;}
    }
    
    public class LoginViewModel
    {
         public UserLogin UserLogin {get;set;}
    }

    e na sua action:

    public ActionResult Login(UserLogin userLogin)
    {
    
    }

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    sábado, 17 de novembro de 2012 02:40
  • Exatamente isso Murilo, estive pensando.

    Minha tabela USUARIO tem uns 20 campos mais ou menos (e sub tabelas de controle).  Mas nem todos estarão na interface então vou criar classes de domínios em alguns casos para poder controlar isso.

    Obrigado

    sábado, 17 de novembro de 2012 12:38