所以我可能对 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();
}
}