2009-05-30 1 views
2

Поэтому я, вероятно, что-то трагически ошибаюсь с db4o, чтобы вызвать эту проблему ... но каждый раз, когда я возвращаю свои context Я теряю все свои объекты. Я имею в виду, что, как только мой объект контейнера выходит из сферы действия (из-за сброса IIS или чего-то еще), я больше не могу извлекать какие-либо объекты, которые я ранее сохранял. В рамках «сеанса» я могу получить все, но как только этот «сеанс» умирает, ничего не возвращается. Что странно, так это то, что файл базы данных продолжает расти в размерах, поэтому я знаю, что все там, где оно просто не возвращается после факта. Любая идея, что происходит?Проблема с объектами db4o ... не возвращается после сброса IIS/контейнера из области видимости

Вот моя общая оболочка для db4o:

public class DataStore : IDisposable { 

    private static readonly object serverLock = new object(); 
    private static readonly object containerLock = new object(); 

    private static IObjectServer server; 
    private static IObjectContainer container; 

    private static IObjectServer Server { 
     get { 
      lock (serverLock) { 
       if (server == null) 
        server = Db4oFactory.OpenServer(ConfigurationManager.AppSettings["DatabaseFilePath"], 0); 
       return server; 
      } 
     } 
    } 

    private static IObjectContainer Container { 
     get { 
      lock (containerLock) { 
       if (container == null) 
        container = Server.OpenClient(); 
       return container; 
      } 
     } 
    } 

    public IQueryable<T> Find<T>(Func<T, bool> predicate) { 
     return (from T t in Container where predicate(t) select t).AsQueryable(); 
    } 

    public IQueryable<T> Find<T>() { 
     return (from T t in Container select t).AsQueryable(); 
    } 

    public ValidationResult Save(IValidatable item) { 
     var validationResult = item.Validate(); 
     if (!validationResult.IsValid) return validationResult; 
     Container.Store(item); 
     return validationResult; 
    } 

    public void Delete(object item) { 
     Container.Delete(item); 
    } 

    public void Dispose() { 
     Server.Close(); 
     Container.Close(); 
    } 
} 
+0

Извините, что это такое "db40"? –

+0

Это объектно-ориентированная база данных - www.db4o.com – Goran

ответ

1

Я думаю, что вам не хватает фиксации заявление в методе Save.

Goran

Смежные вопросы