2009-05-30 6 views
2

Donc, je fais probablement quelque chose de tragiquement faux avec db4o pour provoquer ce problème ... mais chaque fois que je réinitialise mon contexte je perds tous mes objets. Ce que je veux dire par là, c'est que dès que mon objet conteneur est hors de portée (en raison d'une réinitialisation IIS ou autre), je ne peux plus récupérer aucun des objets que j'ai précédemment persistés. Dans le cadre d'une "session" je peux tout récupérer mais dès que cette "session" meurt, rien n'est renvoyé. Ce qui est étrange, c'est que le fichier de la base de données continue de grossir, donc je sais que tout est là, il ne sera jamais retourné après coup. Une idée de ce qui se passe?Problème avec db4o ... les objets ne sont pas retournés après la réinitialisation d'IIS/le conteneur est hors de portée

Voici mon emballage générique pour 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

Désolé, ce qui est "db40"? –

+0

C'est une base de données orientée objet - www.db4o.com – Goran

Répondre

1

Je pense que vous manquez la déclaration dans votre méthode Enregistrer commettras.

Goran

Questions connexes