2010-01-22 9 views
3

J'utilise NHibernate Profiler pour voir si le traitement par lots se produit réellement. Le code ressemble à ceciFluent NHibernate SetBatchSize méthode

Session.NHibernateSession.SetBatchSize(data.Items.Count); 
    foreach (var o in data.Items) 
    { 
     //something else... 
     base.Save(o); 
    } 
    Session.NHibernateSession.SetBatchSize(0); 

Le profileur me donne toujours l'erreur "grand nombre d'écritures individuelles".

BTW Im en utilisant Fluent NHibernate

Thnx

Répondre

2

Je n'aime pas laisser les choses comme la taille des lots au hasard si je fais que tout ce que je batch lors de l'enregistrement dans une transaction explicite et il semble faire l'affaire pour moi.

Session.NHibernateSession.SetBatchSize(data.Items.Count); 
Session.NHibernateSession.FlushMode = FlushMode.Commit; 
using (var tx = Session.NHibernateSession.BeginTransaction()) 
{ 
    foreach (var o in data.Items) 
    { 
     //something else... 
     base.Save(o); 
    } 
    tx.Commit(); 
} 
Session.NHibernateSession.SetBatchSize(0); 
+0

Je l'ai compris. Le problème était dans IdentityGenerator. Il a été défini sur AutoIdentity (SQL Server). Dès que je l'ai changé pour HiLo, il a commencé à fonctionner. –

1

Je l'ai compris. Le problème était dans IdentityGenerator. Il a été défini sur AutoIdentity (SQL Server). Dès que je l'ai changé pour HiLo, il a commencé à fonctionner.