Я работаю с C# и nhibernate для доступа к базе данных. У меня есть два или три терминала, которые могут реализовать те же действия, что и редактировать, или удалять объекты из одного и того же БД. Моя проблема заключается в том, что мой терминал не понимает, сделал ли другой терминал какие-либо изменения в базе данных, хотя я снова обновляю данные, выполняющие запросы. Я думаю, что это связано с кешем. Я пробовал команды Flush() и Evict() без каких-либо результатов. Я желаю кто-то может помочь мне, простите за мой английский страшномNHibernate Приведение старых данных
----- Info Добавлено -------
Это C# настольных приложений. Я не вижу никаких ошибок, проблема в том, что когда я редактирую или удаляю, мне нужно знать, был ли объект изменен с другого терминала. и когда я приношу сущность из базы данных, я не вижу изменений в магах с другого терминала до тех пор, пока не перезапустим приложение.
Сеанс создается следующий код:
[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);
}
}
---------- Добавлено -------------
это исключение я получаю после Clear() сеанс
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
Является ли это веб-приложение, настольное приложение? Как создается контекст сеанса? Вы используете NHibernate для управления версиями? Какие ошибки, если таковые имеются, вы видите, например, 'StaleStateException'? Думаю, нам понадобится дополнительная информация, чтобы я мог дать некоторые четкие ответы на этот вопрос. –
Я добавил необходимую вам информацию. спасибо –
Вот как ваша фабрика сеансов строится из конфигурации, но как насчет ваших сеансов - используете ли вы сеанс на форму, сеанс на поток и т. д.? –