none
NHibernate padrão Repository em C# RRS feed

  • Pergunta

  • Senhores,

    Peço a ajuda dos mestres para tentar resolver o design da aplicação.
    Ferramentas usadas: VS2012, WinForms, C#

    Motivação: O sistema deve reduzir drasticamente a quantidade de Stored Procedure para CRUD simples, por este motivo busca-se através das tecnologias existentes reduzir este número. Minha aplicação usa o padrão Repository exatamente com se vê neste Link. 

    Assim, por exemplo, minha classe CorDAO possui um metodo Update, como se vê abaixo, e que funciona perfeitamente (imagem 1). E quem conhece, sabe que o objeto "database" - imagem 1, pode ser qualquer tipo de banco de dados em tempo de execução (factory) - no meu caso PostgreSQL. De modo que a classe concreta que a implementa é a PostgreDataBase.cs ( ver imagem 2)

    image1

    Já a classe PostgreDataBase.cs, está logo abaixo e responsabiliza-se apenas em enviar referências relativas ao PostgreSQL, o mesmo para qualquer outro banco de dados.

    imagem 2

    Logo, usando o NHibernate tentei usar  a mesma lógica usando o método CreateConfiguration() do tipo FluentConfiguration somente para enviar dados de configuração do PostgreSQL - observar que não há menção a qualquer tipo de mapeamento.

    Já a implementação da classe CorDAO3 ficaria assim:

    image 3

    A chamada seria...

    A Bagaçeira.

    Bom, considerando que as referências DLL  e referidos mapeamentos estão corretos como posso resolver?

    a)A abordagem não faz nenhum sentido.

    b) Existem outras alternativas de implementação ou tecnologia mais simples de resolver o problema das Stored Procedure, sem contudo inserir clásulas SQL no código?

    sábado, 30 de janeiro de 2016 15:53

Respostas

  • Tente checar o código da classe Cor3. Aparentemente a mesma não está marcada como "public" (ou talvez parte dela usada no mapeamento).
    • Sugerido como Resposta Renato GroffeMVP segunda-feira, 1 de fevereiro de 2016 10:04
    • Marcado como Resposta Marcos SJ segunda-feira, 1 de fevereiro de 2016 16:31
    segunda-feira, 1 de fevereiro de 2016 10:04

Todas as Respostas

  • Tente checar o código da classe Cor3. Aparentemente a mesma não está marcada como "public" (ou talvez parte dela usada no mapeamento).
    • Sugerido como Resposta Renato GroffeMVP segunda-feira, 1 de fevereiro de 2016 10:04
    • Marcado como Resposta Marcos SJ segunda-feira, 1 de fevereiro de 2016 16:31
    segunda-feira, 1 de fevereiro de 2016 10:04
  • Olá Renato,

    Olha... anteriormente eu até havia feito conforme sua reposta, de imediato obtive o seguinte erro:
    negocio.Cor3:method Alterar should be......internal virtual"
    negocio.Cor2:method Alterar should be......internal virtual" --Esta classe Cor2 não tinha absolutamente nada haver com o contexto, apenas uma classe abrindo uma session, mas que NÃO era chamada em meus testes.
    Logo, me sucitou algumas dúvidas que pode ou não estarem relacionadas:
    1) Será por que eu não usei Sigleton para abrir uma session esse contexto se misturou? - ver que nosso tio Macoratti usou esse padrão neste link.

    2) Usando a sintaxe using dispensaria à tecnica singleton do item 1?

     using (var session = config.OpenSession()){
    ....
    }

    3) A execução do método .BuildSessionFactory() demorá de 4 a 5s é isso mesmo ou a máquina que uso para esses testes é ruim? ou seja o NHibernate tem uma discreta perda de performance em relação ao código de mais baixo nível de abstração?

    Informo que o código funcionou depois que reinicei o computador - sem tirar nem por código algum.
    Preciso deste feedback por que a aplicação que desenvolvo é multithread - crítica por sinal, portanto, gostaria de saber se estou fazendo o correto, já que sou novo em NHibernate.
    Continuarei fazendo mais testes até torná-la segura  e me comprometeria em publicar um artigo sobre "Adaptação do velho e poderoso padrão factory database ao NHibernate.(sistema híbrido.. rsrsr) Pelo simples motivo que ainda não consegui achar artigo similiar na web. e ajudaria MUITA MUITA gente na aderência de seus sistemas legados às novas tecnologias ( por favor me sugerir um site para divulgar, rsrsrs)

    OBRIGADO "" Renato. 

      


    Valnei Filho







    • Editado v_marinpietri terça-feira, 2 de fevereiro de 2016 15:49
    terça-feira, 2 de fevereiro de 2016 14:35