如何与CF9中的独立对象一起工作?
-
09-10-2019 - |
题
如果 User
是一个实体,我需要存储 User
在 Session
, ,它将根据下一个请求分离。
afaik只有2种方法来处理这些分离的对象
EntityMerge(session.user)
- 使用Session对象(不安全)更新DBsession.userID
-entityLoadByPK()
再次在下一个请求(更多负载)
这些是仅有的两个解决方法吗?还有其他方法吗?
根据 带有ColdFusion 9 Orm Integration Slide Deck的高级技术 如果合并更改实体,则与方法1的并发将丢弃错误,但是这有用?捕获异常并使用方法#2?
何时使用 EntityReload()
?我认为它的工作方式与 EntityMerge(entity)
但事实并非如此。
谢谢!
解决方案
我倾向于仅存储会话中登录的用户的ID。
然后,我有一个userService.getCurrentuser()幕墙方法,该方法在我需要的情况下返回该用户。
这样,用户始终是最新的,并且永远不会超越。
其他提示
我通常只在会话中使用轻巧的代理对象(仅包含顶级属性),并且仅在与您所描述的完全相同的用例中加载完整的实体。除非您真的想燃烧自己(在那里聊天),否则不要使用方法#1。
冬眠会议是懒惰的,不要持续。因此,当您在内存中有CF对象时,它们指向一个冬眠的会话,该会话超出了范围,因为缺乏更好的术语。要重新恢复范围,您基本上需要使用EntitySave()或EntityLoadByExample()之类的内容来唤醒其后续请求。
我确实同意,在服务中包装不仅可以帮助您避免其中一些问题,而且总体上比直接触摸实体更好。
不隶属于 StackOverflow