NHibernate Ввод старых данных - PullRequest
2 голосов
/ 09 февраля 2012

Я работаю с c # и nhibernate для доступа к базе данных.У меня есть два или три терминала, которые могут выполнять одни и те же действия, такие как редактирование или удаление объектов из одной БД.Моя проблема в том, что мой терминал не понимает, сделал ли другой терминал какие-либо изменения в базе данных, хотя я обновляю данные, снова выполняя запросы.Я думаю, что это связано с кешем.Я пробовал команды Flush () и Evict () безрезультатно.Я хотел бы, чтобы кто-нибудь мог помочь мне, извините за мой ужасный английский

----- Информация добавлена ​​-------

Это настольное приложение ac #.Я не вижу никаких ошибок, проблема в том, что когда я редактирую или удаляю, мне нужно знать, был ли объект изменен с другого терминала.и когда я беру сущность из базы данных, я не вижу изменений, внесенных с другого терминала, пока вы не перезапустите приложение.

Сеанс создается следующим кодом:

[PossibleLongOperation]
        private void DoConnectionWork(string nhibernateConfigPath)
        {
            String appPath = Directory.GetParent(Assembly.GetAssembly(GetType()).Location).FullName;
            String serializablefilePath = Path.Combine(appPath, "configuration.serialized");
            try
            {
                if (IsConfigurationFileValid(serializablefilePath))
                {
                    Configuration = LoadConfigurationFromFile(serializablefilePath);
                }
                else
                {
                    // configuration is immutable, store last returned value
                    Configuration = new Configuration();
                    Configuration.Configure(nhibernateConfigPath);
                    Configuration.AddAssembly(typeof(ObjectEntity).Assembly);
                    SaveConfigurationToFile(serializablefilePath, Configuration);
                    new SchemaUpdate(Configuration).Execute(true, true);
                    Console.WriteLine(@"Se solicitó la actualización de datos");
                }
                //NHibernateSchemaExport();
            }
            catch (Exception ex)
            {
                //if(File.Exists(serializablefilePath))
                //    File.Delete(serializablefilePath);
                throw new GenericRepositoryException(string.Format("Error while configuring NHibernate: {0}.", ex.Message), ex);
            }

            try
            {
                SessionFactory = Configuration.BuildSessionFactory();
            }
            catch (Exception ex)
            {
                //if (File.Exists(serializablefilePath))
                //    File.Delete(serializablefilePath);
                throw new GenericRepositoryException(string.Format("Error while building NH session factory: {0}.", ex.Message), ex);
            }
        }

---------- Добавлено -------------

это исключение, которое я получаю после очистки () сеанса

09-02-2012 13:22:54|Error|Error:  
NHibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 394, of entity: Model.Pedido
   en NHibernate.Engine.StatefulPersistenceContext.CheckUniqueness(EntityKey key, Object obj) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\StatefulPersistenceContext.cs:línea 688
   en NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformUpdate(SaveOrUpdateEvent event, Object entity, IEntityPersister persister) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:línea 227
   en NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsDetached(SaveOrUpdateEvent event) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:línea 186
   en NHibernate.Event.Default.DefaultUpdateEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultUpdateEventListener.cs:línea 29
   en NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:línea 53
   en NHibernate.Impl.SessionImpl.FireUpdate(SaveOrUpdateEvent event) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:línea 2666
   en NHibernate.Impl.SessionImpl.Update(Object obj) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:línea 524
   en Besnik.GenericRepository.NHibernate.NHibernateUnitOfWork.Update[TEntity](TEntity entity)
   en Besnik.GenericRepository.GenericRepository`2.Update(TEntity entity)
   en Services.Services.Implementation.PedidoServiceImpl.<>c__DisplayClass8.<Anular>b__7() en C:\Repositorio\ProyectosCasinoClub\SPMontaPlatosOK\Code\Services\Services\Implementation\PedidoServiceImpl.cs:línea 72
   en Services.Transaction.Transaction.Execute(Action transactionalAction, Action`1 onException) en C:\Repositorio\ProyectosCasinoClub\SPMontaPlatosOK\Code\Services\Transaction\Transaction.cs:línea 32

1 Ответ

2 голосов
/ 09 февраля 2012

Вы пытались очистить кеш сессии L1 с помощью session.Clear ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...