Castle ActiveRecord:不同线程中的会话错误搜索和延迟加载属性的访问

发布于 2024-08-31 23:14:02 字数 412 浏览 2 评论 0原文

我在 C# 中使用 Castle ActiveRecord 的多线程桌面应用程序遇到了问题:

为了在根据用户输入搜索对象时保持 GUI 处于活动状态,我使用 BackgroundWorker 作为搜索功能。对象的某些属性,尤其是一些 HasMany-Relations,被标记为 Lazy

现在,当搜索完成并且用户选择结果对象时,应该显示该对象的一些属性。但由于搜索是由不同线程中的 BackgroundWorker 完成的,因此访问属性会失败,因为延迟访问的会话不再可用。

在额外的线程中进行搜索以保持 GUI 处于活动状态并正确访问所有属性(包括标记为惰性的属性)的最佳方法是什么?

感谢您的任何建议!

问候 SC911

I've got a problem with an multi-threaded desktop application using Castle ActiveRecord in C#:

To keep the GUI alive while searching for the objects based on userinput I'm using the BackgroundWorker for the search-function. Some of the properties of the objects, especially some HasMany-Relations, are marked as Lazy.

Now, when the search is finished and the user selects an resulting object, some of the properties of this object should be displayed. But as the search was done by the BackgroundWorker in a different thread, accessing the properties fails as the session for the lazy-access is no longer available.

What will be the best way to do the search in an extra thread to keep the GUI alive and to access all properties correctly including those marked as lazy?

Thanks for any advise!

Regards
sc911

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枯叶蝶 2024-09-07 23:14:02

有几个选项:

  • 查询时,在主线程中预先加载稍后需要的任何内容,从而避免延迟加载。
  • 使用 ISession.Lock() 重新附加实体到主线程中的 ISession。

A couple of options:

  • When querying, do an eager load of whatever you will need later in the main thread, thus avoiding lazy loading.
  • Use ISession.Lock() to reattach the entities to the ISession in the main thread.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文