J'ai un comportement étrange de NHibernate et ADO.NET. J'utilise NHibernate comme ORM standard mais certaines opérations sont plus rapides avec ADO.NET (comme le traitement par lots ou l'appel d'une procédure stockée).Nhibernate lecture suivante après appel de procédure stockée
Je fais ce qui suit
var item = _items.GetById(100);
Alors j'appelle une procédure stockée qui ne mettre à jour la même entité avec les instructions suivantes
var session = _sessionManager.OpenSession();
using (var tx = session.BeginTransaction())
{
var item = _items.GetAll().FirstOrDefault(x => x.ItemCode == code);
var cmd = session.Connection.CreateCommand();
session.Transaction.Enlist(cmd);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter id = SQLUtil.GetParam("@bigId", SqlDbType.BigInt, inout: false);
cmd.CommandText = "storedUpdateItem";
cmd.Parameters.Add(SQLUtil.GetParam("@tstTS", SqlDbType.Timestamp, inout: false));
cmd.Parameters.Add(id);
int ret = cmd.ExecuteNonQuery();
if (ret != 1)
{
throw new ApplicationException("Something gone wrong with update");
}
tx.Commit();
return _items.GetById(id.Value);
}
Ainsi, la dernière opération pour récupérer à nouveau à l'aide un référentiel NHibernate définit l'élément. Le problème est que l'élément n'est pas mis à jour avec la base de données. Cela semble être la version précédente. Une idée?