使用 ORM 时,如何安全地跨层发送加载的实体

Posted

技术标签:

【中文标题】使用 ORM 时,如何安全地跨层发送加载的实体【英文标题】:When using an ORM, how to safely send loaded entities across the tiers 【发布时间】:2008-09-17 22:05:47 【问题描述】:

当系统有 N 层时,当使用 ORM 时,如何跨层发送加载的实体?

你使用 DTO 吗?

当不使用DTO,直接发送实体时,如何防范未初始化的延迟加载关系错误?

注意:这不是“应该使用 N 层吗?”问题。我假设系统已经有 N 层了。

【问题讨论】:

【参考方案1】:

我不知道是否有更好的方法,但是当我们使用 Hibernate 时,我们只是关闭延迟加载,以便它加载所有内容。这样做显然要花费更多,但我不确定如何摆脱 Hibernate 将创建的延迟加载方法。

如果一个容器有一组不经常使用的数据,那么它们将不会被加载,由请求 UI 表单来调用它并发送它以进行更新。 (我们构建了更新类来一起传递所有信息)

对于加载大量容器的 UI 表单,我们只需创建特殊类并填写我们需要的内容。它们是一种不用于持久性的只读容器。

可能有更好的方法..但我正在学习:)

【讨论】:

【参考方案2】:

我只是想用 ORM 找到自己的方式。

这是一个吸引人的概念。像您一样,我不希望应用程序中的其他层知道 ORM 存在。

我目前正在查看的是使用我设计的接口和使用部分类(C#/.net 的东西,没有部分类,我想我会编写一个包装器)将接口的实现添加到类型上由 ORM 生成。

就延迟加载/延迟执行而言,应用程序也应该不可见。这是 ORM 提供的一项很好的服务,我很高兴它提供了,但我的应用程序不需要知道或关心它。因此,如果 ORM 没有向您隐藏它,那么我会再次查看一个处理此问题的包装器,以便应用程序不需要知道或关心。

【讨论】:

以上是关于使用 ORM 时,如何安全地跨层发送加载的实体的主要内容,如果未能解决你的问题,请参考以下文章

网络安全-主动信息收集篇第一章

加载关系时如何指示SQLAlchemy ORM并行执行多个查询?

orm 实体框架 4 和代码优先

如何在更新数据库和应用程序 ORM 时最小化应用程序停机时间

simplexml_load_file():I/O 警告:未能加载外部实体“/user-bundle/Resources/config/doctrine/model/User.orm.xml

ORM 性能:greenDAO 比 ORMLite 快吗?