J'ai un bit de données dénormalisé utilisé pour des raisons de performances et j'essaie de maintenir les données avec un écouteur d'événement NHibernate plutôt qu'un déclencheur. Je ne suis pas convaincu que ce soit la meilleure approche, mais je suis au coude-cou et je veux comprendre cela avant de passer à autre chose. Je reçois l'erreur suivante:Maintenir les données dénormalisées avec NHibernate EventListener
System.InvalidOperationException : Collection was modified; enumeration operation may not execute.
System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
System.Collections.Generic.List`1.Enumerator.MoveNextRare()
System.Collections.Generic.List`1.Enumerator.MoveNext()
NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
NHibernate.Engine.ActionQueue.ExecuteActions()
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions (IEventSource session)
NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)
NHibernate.Impl.SessionImpl.Flush()
NHibernate.Transaction.AdoTransaction.Commit()
Voici le code pour faire advenir:
using (var tx = session.BeginTransaction())
{
var business = session
.Get<Business>(1234)
.ChangeZipCodeTo("92011");
session.Update(business);
tx.Commit(); // error happens here
}
et l'écouteur d'événement:
public void OnPostUpdate(PostUpdateEvent @event)
{
var business = @event.Entity as Business;
if (business != null)
{
var links = @event.Session
.CreateQuery("select l from BusinessCategoryLink as l where l.Business.BusinessId = :businessId")
.SetParameter("businessId", business.BusinessId)
.List<BusinessCategoryLink>();
foreach (var link in links)
{
link.Location = business.Location;
@event.Session.Update(link);
}
}
}
Avez-vous trouvé une solution à ce problème? Je suis également confronté au même problème. – madaboutcode
Non, je n'ai pas réussi à l'accomplir avec un écouteur d'événement. –