2009-05-30 2 views
2

Also mache ich wahrscheinlich etwas tragisches falsches mit db4o, um dieses Problem zu verursachen ... aber jedes Mal setze ich mein Kontext Ich verliere alle meine Objekte. Was ich damit meine, ist, dass sobald ich mein Container-Objekt aus dem Geltungsbereich verlasse (aufgrund eines IIS-Reset oder was auch immer), kann ich keine der Objekte mehr abrufen, die ich zuvor beibehalten habe. Im Rahmen einer "Sitzung" kann ich alles abrufen, aber sobald diese "Sitzung" stirbt, wird nichts zurückgegeben. Was merkwürdig ist, ist, dass die Datenbankdatei immer größer wird, also weiß ich, dass alles da ist, es wird nie nach der Tat zurückgegeben. Irgendeine Idee was ist los?Probleme mit db4o ... -Objekten werden nicht zurückgegeben, nachdem ein IIS-Reset/Container den Gültigkeitsbereich verlassen hat

Hier ist meine allgemeine Wrapper für 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

Entschuldigung, was ist "db40"? –

+0

Es ist eine objektorientierte Datenbank - www.db4o.com – Goran

Antwort

1

Ich glaube, Sie vermissen die Anweisung in der Save-Methode begehen.

Goran

Verwandte Themen