c# - db4o 问题...在 IIS 重置/容器超出范围后不返回对象

标签 c# db4o

所以我可能在 db4o 上做了一些可悲的错误导致了这个问题的发生……但是每次我重置我的上下文时我都会丢失我所有的对象。我的意思是,一旦我的容器对象超出范围(由于 IIS 重置或其他原因),我就无法再检索我之前保留的任何对象。在“ session ”范围内,我可以检索所有内容,但一旦该“ session ”结束,则不会返回任何内容。奇怪的是数据库文件的大小继续增长,所以我知道所有东西都在里面,但事后永远不会返回。知道发生了什么事吗?

这是我的 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();
    }
}

最佳答案

我认为您在 Save 方法中缺少提交语句。

戈兰

关于c# - db4o 问题...在 IIS 重置/容器超出范围后不返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/928597/

相关文章:

c# - 为什么编译器添加了一个不需要的局部变量

c# - 如何在 ViewModel 中捕获动态按钮点击

c# - 如何在 VSCode 中设置默认发布操作

c# - 在 DB4O 中按类型查询

java - 我可以/应该在 db4o 的复杂对象结构中使用 Wea​​kReference 吗?

c# - 如何从 C# 调用 F# 类型扩展(静态成员函数)

c# - ManageUserViewModel 类在哪里?

c# - db4o SODA 比较字段值

nosql - 如何设计非sql数据库的查询

java - 在 db4o 中存储对象列表