Je cherche à implémenter le modèle IRepository en utilisant NHibernate et j'ai une question à laquelle je n'ai pas été capable de répondre en cherchant sur le net. Supposons que j'ai 3 référentiels, PersonRepository, PersonAddressRepository et PersonAccountRepository. Supposons maintenant que la logique métier impose qu'il y ait un processus "Deactivate Person" qui appelle PersonRepository.Deactivate(), PersonAddressRepository.Deactivate() et PersonAccountRepository.Deactivate().C# Transactions partagées et NHibernate utilisant IRepository
Je veux être en mesure de faire quelque chose le long des lignes de ..
using (ITransaction transaction = session.BeginTransaction()) {
session.Update(Person);
session.Update(PersonAddress);
session.Update(PersonAccount);
}
Alors que si l'une de ces mises à jour échouent que l'ensemble du processus annule au sein de la base de données. Maintenant, au moment ma compréhension de NHibernate est que vous ne pouvez créer une session par objet pour ..
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(Person).Assembly);
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
using (ISession session = sessionFactory.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Save(Person);
}
Est-ce exact ou je me trompe? Quelles sont les meilleures pratiques pour les transactions concernant les mises à jour multi-tables et les transactions relatives à NHibernate.
Merci d'avance.
Salut merci pour votre réponse, ma question de suivi est, est ce service de transaction en effet de gérer un pool de transactions de sorte que si un échoue alors toutes les transactions dans le pool sont annulées? Ou existe-t-il un moyen de partager 1 Transaction entre plusieurs référentiels? – David
Il y a une transaction par thread. Bien sûr, d'autres transactions parallèles se poursuivent sur d'autres threads. –