none
Salvar no BD usando Fluent Nhibernate RRS feed

  • Pergunta

  • Pessoal, preciso de ajuda pro windows forms, e passei a noite em claro tentando resolver mas sem sucesso. preciso salvar varias linhas no meu bd usando fluent nhibernate. vamos lá! ao clicar numa celula do gridview tenho o seguinte codigo

     private void dtgComposicao_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {  
                        ingredientes = new HelpDesk.Dominio.Entidades.Ingredientes();          
                        int linhaIndex = dtgComposicao.CurrentRow.Index;
                        int codigo = int.Parse(dtgComposicao.Rows[linhaIndex].Cells[1].Value.ToString());
                        ingredientes = Repositorio.ObterPorId(codigo);
                        ListaIngredientes.Add(ingredientes);
            }

    preencho a lista de ingredientes numa lista e ao clicar no botao de composicao tenho o seguinte codigo:

     ingredientesProdutos = new HelpDesk.Dominio.Entidades.IngredientesProdutos();
                produtos = new HelpDesk.Dominio.Entidades.Produtos();
                produtos = RepProdutos.ObterPorId(idProduto);
                foreach (HelpDesk.Dominio.Entidades.Ingredientes item in ListaIngredientes)
                {
                    ingredientesProdutos.Ingrediente = item;
                    ingredientesProdutos.Produto = produtos;
                    RepIngredientesProdutos.Salvar(ingredientesProdutos);
                   
                }

    ai vem o problema, se acaso eu tiver mais de um ingrediente na minha lista ele salva apenas o ultimo ingrediente do foreach e pelo que eu percebi, ele gera uma mesma ID para todos ingredientes e apenas atualiza e nao salva toda lista.

    vou deixa abaixo o codigo do metodo Salvar, a configuraçao de sessao e tambem o mapeamento para que vcs tentem me ajudar.

    //Método Salvar no banco
    public void Salvar(T entidade)
            {
                String validacao = entidade.Validar();
                if (validacao != string.Empty)
                    throw new ArgumentException(validacao);
    
                using (var trans = Session.BeginTransaction())
                {
                    
                        this.Session.Save(entidade);
                        trans.Commit();
                   
                }
            }
    
    //Configuraçao de sessão
    public class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;
        private static Configuration cfg = new Configuration();
    
        public static ISession GetSession()
        {
            if (_sessionFactory == null)
            {
                log4net.Config.XmlConfigurator.Configure();
                lock (typeof(NHibernateHelper))
                {
                    if (_sessionFactory == null)
                    {
                        _sessionFactory = Fluently.Configure()
                            .Database(MsSqlConfiguration.MsSql2005//mudei aqui // MySql: MySQLConfiguration.Standard
                                    .ShowSql()
                           
                           .ConnectionString(c => c.Is(@" Server = .\ALEssandro; Database = PizzaBoing; integrated security = true;")))
                            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<RepositorioClientes>()).ExposeConfiguration(c =>
                            {
                                c.SetProperty("adonet.batch_size", "1");
                                
                            })
                         //.ExposeConfiguration(BuildSchema)
    
                            .BuildSessionFactory();
                    }
                }
            }
            return _sessionFactory.OpenSession();
        }
    
        private NHibernateHelper()
        {
        }
    
        private static void BuildSchema(Configuration config)
        {
    
            //new SchemaExport(config).SetOutputFile(@"D:\Curso\HelpDesk.sql")
    
            new SchemaExport(config).SetOutputFile(@"C:\PizzaBoingBD\PizzaBoing.sql")
    
              .Create(true,true);
        }
    }
    
    //Mapeamento das tabelas, apenas uma pois todas são padrao.
    namespace HelpDesk.Repositorio.Mapeamento
    {
        public class IngredientesProdutosMAP : ClassMap<IngredientesProdutos>
        {
            public IngredientesProdutosMAP()
            {
                Id(x => x.ID).GeneratedBy.HiLo("0");
    
                References(x => x.Ingrediente);
    
                References(x => x.Produto);
    
                Map(x => x.Situacao)
                    .CustomType<Situacao>();
            }
    
        }
    }

    é isso ai pessoal, espero que eu tenha sido claro, pois preciso terminar esse sistema de vendas e travei logo nisso. 

    Desde já agradeço a quem puder dar dicas ou a resolução.



    • Editado godinis22 segunda-feira, 12 de junho de 2017 00:52
    quinta-feira, 8 de junho de 2017 09:49

Respostas

  • Onde você está salvando os dados? Eles estão sendo salvos com o mesmo ID? 
    estava salvando na minha tabela produtosingredientes porem, ele nao incrementava uma Id e sim alterava um valor que foi salvo numa varrida anterior do foreach. Mas gostaria de agradecer pela boa vontade de me ajudar, mas já consegui, eu precisava apenas instanciar uma nova session dentro do foreach, pois a cada varria ele gerava uma nova id automatico, podendo assim, gravar todos os dados da minha lista.
    • Marcado como Resposta godinis22 segunda-feira, 12 de junho de 2017 00:57
    segunda-feira, 12 de junho de 2017 00:57

Todas as Respostas

  • Bom dia, godinis22. Tudo bem?

    Essa seria uma questão de "Break Fix/Erro" ou "How to/Customização"?
    quinta-feira, 8 de junho de 2017 12:37
  • Bom dia, godinis22. Tudo bem?

    Essa seria uma questão de "Break Fix/Erro" ou "How to/Customização"?
    bom dia, nao sei lhe responder essa pergunta. só acho engraçado não funcionar, e eu nao descubro o erro
    sexta-feira, 9 de junho de 2017 06:38
  • Onde você está salvando os dados? Eles estão sendo salvos com o mesmo ID? 
    sexta-feira, 9 de junho de 2017 12:12
  • Onde você está salvando os dados? Eles estão sendo salvos com o mesmo ID? 
    estava salvando na minha tabela produtosingredientes porem, ele nao incrementava uma Id e sim alterava um valor que foi salvo numa varrida anterior do foreach. Mas gostaria de agradecer pela boa vontade de me ajudar, mas já consegui, eu precisava apenas instanciar uma nova session dentro do foreach, pois a cada varria ele gerava uma nova id automatico, podendo assim, gravar todos os dados da minha lista.
    • Marcado como Resposta godinis22 segunda-feira, 12 de junho de 2017 00:57
    segunda-feira, 12 de junho de 2017 00:57