如何在NHibernate WinForms应用程序中提供提示列表 背景
使用NHibernate的WinForms应用程序。应用程序为MDI样式,每个MDI子窗体在加载时打开一个新的NHibernate会话,该会话在窗体的生命周期内保持打开状态 问题: 我的应用程序基本上是一个“订单管理”或“采购”系统。一个特定的表单使用很多“查找”列表。例如产品列表、供应商列表、地点列表、计量单位列表、价格报价列表等 很多列表,当表单构建时都会被加载 问题:我需要查找列表,但我需要更快地加载表单。表单花费的时间太长,无法执行所有查找。如何获得更好的性能并保留查找列表 我的想法如何在NHibernate WinForms应用程序中提供提示列表 背景,winforms,nhibernate,Winforms,Nhibernate,使用NHibernate的WinForms应用程序。应用程序为MDI样式,每个MDI子窗体在加载时打开一个新的NHibernate会话,该会话在窗体的生命周期内保持打开状态 问题: 我的应用程序基本上是一个“订单管理”或“采购”系统。一个特定的表单使用很多“查找”列表。例如产品列表、供应商列表、地点列表、计量单位列表、价格报价列表等 很多列表,当表单构建时都会被加载 问题:我需要查找列表,但我需要更快地加载表单。表单花费的时间太长,无法执行所有查找。如何获得更好的性能并保留查找列表 我的想法
- 我是否可以加载一次查找列表,并在应用程序的生命周期中保留它们,并定期检查列表是否过时
- 我可以只加载列表的文本描述,而不是保存一堆IList、IList等,我可以保存一堆IList,然后在保存时,对NHibernate执行Gets以获取真正的对象
- 有没有其他我没有想到的方法
如果需要列表中的业务对象来执行数据库操作,可以调用ISession.Lock(obj)将对象锁定到当前ISession中。需要注意的一点是,锁不会自动级联到子对象:我认为有一个映射设置可以做到这一点,或者您可以手动执行。是的,我知道我需要做一些事情才能将业务对象放入当前会话,我需要阅读lock()。我认为这种方法对我来说更容易,因为我有完整的对象来处理。持有ID和描述似乎也会起作用,但在节省时间时,似乎更需要转换这些ID。我确实考虑过这一点,但我不想采取额外的复杂性来保存。我将尝试在内存中缓存对象,因为它将为我提供完整的对象。如果失败了,那么我的下一个方法是使用ID+Descr方法,并在保存时转换为完整对象。