gpt4 book ai didi

nhibernate - Fluent NHibernate - 需要对单个延迟加载的 SQLite 数据库进行多程序访问

转载 作者:行者123 更新时间:2023-12-03 19:09:12 25 4
gpt4 key购买 nike

我正在开发一个项目,该项目具有多个程序,这些程序共享一个延迟加载的 SQLite 数据库文件,使用 Fluent Nhibernate(自动映射)作为数据访问层。

我开发的第一个程序(我们称之为程序 1)一直保持 Session 处于打开状态,并且延迟加载运行良好。

当我让程序 2 运行时,这种方法失败了,并在程序 1 运行时尝试从程序 2 写入数据库 - 我得到“数据库锁定”异常。

我通过在程序 1 启动后关闭 session 来解决这个问题 - 例如

        private ISessionFactory _sessionFactory;
private ISession _session;

_sessionFactory = Database.CreateSessionFactory();

_session = _sessionFactory.OpenSession();
_session.BeginTransaction();

// ... read the database here

_session.Close();

当然,当用户从用户界面选择不同的数据数据集时,这破坏了程序 1 中的延迟加载——这是我所预料的。

我以为只要用户选择新数据,我就可以再次打开 session ,然后再次关闭它 - 例如
        if ( !_session.IsOpen )
_session = _sessionFactory.OpenSession();

if ( !_session.IsConnected )
_session.Reconnect();

_session.BeginTransaction();

// ... read the database here

_session.Close();

但到目前为止,还没有能够让这个工作。当我尝试读取数据时,我得到“没有 session ,或 session 已关闭”异常,即使我刚刚打开了一个 session 。 (连接的测试只是一个实验,因为异常跟踪中说了一些关于在断开连接时抛出惰性异常的内容,但它没有帮助)

我究竟做错了什么?

最佳答案

您是否可以构建一个由第一个调用它的应用程序启动的服务层(或者如果您在 Windows 盒子上注册为 Windows 服务),然后让每个人都调用该服务以从中获取数据?

我不是在谈论拥有单独的服务器,只是您的程序调用的单独服务。

关于nhibernate - Fluent NHibernate - 需要对单个延迟加载的 SQLite 数据库进行多程序访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1931558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com