Received: by 10.100.245.28 with SMTP id s28mr10716323anh.6.1335882382195; Tue, 01 May 2012 07:26:22 -0700 (PDT) X-BeenThere: nhibernate-br@googlegroups.com Received: by 10.236.119.195 with SMTP id n43ls6114377yhh.3.gmail; Tue, 01 May 2012 07:26:21 -0700 (PDT) MIME-Version: 1.0 Received: by 10.236.80.42 with SMTP id j30mr711488yhe.10.1335882381548; Tue, 01 May 2012 07:26:21 -0700 (PDT) Authentication-Results: ls.google.com; spf=pass (google.com: domain of silva...@gmail.com designates internal as permitted sender) smtp.mail=silva...@gmail.com; dkim=pass header...@gmail.com Received: by f37g2000yqc.googlegroups.com with HTTP; Tue, 1 May 2012 07:26:21 -0700 (PDT) Date: Tue, 1 May 2012 07:26:21 -0700 (PDT) In-Reply-To: References: <10981939.1182.1335815464188.JavaMail.geo-discussion-forums@ynjb15> User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0,gzip(gfe) Message-ID: <1115c39e-c7e7-45d0-af58-570bf3972dc7@f37g2000yqc.googlegroups.com> Subject: Re: Gravar registro em bloco no banco via NHibernate ... From: Rafael To: NHibernate-Br Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Bom Dia, J=E1 tiver que criar um conversor de dados, ontem precisamos migrar dados de uma estrutra para outra, nesse processo havia uma tabela de movimenta=E7=F5es de estoque, com pouco mais de 130 mil registros, para importar uma movimenta=E7=E3o era necess=E1rio primeiramente importar todos os demais relacionamentos e depois as movimenta=E7=F5es com suas devidas regras de negocio. Como o processo era demorado e utilizar o metodo session.SaveOrUpdate(entity); gera um cache e estoura a mem=F3ria ent=E3o foi criado um "SalvaSemCache" exemplo: //Salvar normal public override T Salva(T entity) { //Recupera a sessao corrente //Poderia se usado dessa forma, mas na declara=E7=E3o ser=E1 chamado apenas uma vez a propriedade NHibernateHttpModule.CurrentSession; //o using =E9 usado para uma transa=E7=E3o atomica caso ocorra um erro toda a transa=E7=E3o ser=E1 dada rollback. //using (RepositorioSession) var session =3D this.RepositorioSession; //Inicia uma transa=E7=E3o using (var transacao =3D session.BeginTransaction()) { try { //Persiste a entidade session.SaveOrUpdate(entity); //Comita a transa=E7=E3o transacao.Commit(); } catch (Exception) { //Em caso de erro realiza um Rollback na transa=E7=E3o transacao.Rollback(); throw; } } return entity; } //Limpando o "cache" public override T SalvaSemCache(T entity) { //Recupera a sessao corrente //Poderia se usado dessa forma, mas na declara=E7=E3o ser=E1 chamado apenas uma vez a propriedade NHibernateHttpModule.CurrentSession; //o using =E9 usado para uma transa=E7=E3o atomica caso ocorra um erro toda a transa=E7=E3o ser=E1 dada rollback. //using (RepositorioSession) using (var session =3D this.RepositorioSession) { //Inicia uma transa=E7=E3o using (var transacao =3D session.BeginTransaction()) { try { //Persiste a entidade session.SaveOrUpdate(entity); //Comita a transa=E7=E3o transacao.Commit(); } catch (Exception) { //Em caso de erro realiza um Rollback na transa=E7=E3o transacao.Rollback(); throw; } } session.Flush(); session.Clear(); } return entity; } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D =3D=3D> ... Lembrando que tamb=E9m foi utilizado um insert direto a grande diferen=E7a entre o insert e o "SalvaSemCache" =E9 os relacionamentos quando vc tem um Entidade.Entidade o SalvarSemCache faz o trabalho de salvar toda a estrutura, j=E1 o insert n=E3o salva os relacionamentos!! =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D public override T Insert(T entity) { using (var session =3D ConfigFactory.Instance.SessionFactory.OpenStatelessSession()) { using (var transacao =3D session.BeginTransaction()) { try { session.Insert(entity); transacao.Commit(); } catch { transacao.Rollback(); throw; } } } return entity; } Em resumo utilizei o SalvarSemCache para as regras de negocios ap=F3s ter inserido todos os registros em banco com o Insert o resultado foi de um processamento de 10horas com "estou de mem=F3ria" para um processamento de 3 horas com 100% de integridade das movimenta=E7=F5es. Bom espero ter ajudado. At.