问题标签 [orm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
3188 浏览

security - 使用 NHibernate 时实现安全性的最佳实践是什么?

传统主义者认为,与使用 NHibernate 等对象关系映射 (ORM) 框架相比,存储过程提供了更好的安全性。

为了反驳这个论点,NHibernate 可以使用哪些方法来确保适当的安全性(例如,防止 sql 注入等)?

每个答案请只提供一种方法

0 投票
3 回答
2017 浏览

.net - 支持 OleDb 和存储过程的良好 .NET ORM 框架?

我们系统中的典型存储过程接受大约 20 个左右的参数。也没有机会重构这些存储过程。我基本上求助于编写自己的代码生成器,将这些 SP 包装到(与数据库提供程序无关的)“命令”对象中,它们的公共属性对应于 SP 参数。它有效,但我更喜欢第 3 方久经考验的解决方案。

任何人都可以推荐任何东西吗?我还没有找到一个支持 OleDB 和存储过程的。

编辑:由于 SQL 6.5(信不信由你),我需要 OleDb 连接。ADO.NET 无法连接到 SQL 6.5。此外,这是一个 .NET 2.0 应用程序,所以 LinqToSql 对我没有用处。

Edit2:我已经尝试过 nHibernate 和 iBatis。它们都不适合我的需要。上次我尝试 nHibernate 时,它​​要求 SP 返回一个结果集。我的SP不是这种情况。它们都需要我手动指定参数。

0 投票
7 回答
5958 浏览

orm - 业务对象/数据库访问层的架构

由于各种原因,我们正在编写一个新的业务对象/数据存储库。该层的要求之一是将业务规则的逻辑与实际的数据存储层分开。

可以有多个数据存储层来实现对同一个对象的访问——例如,实现大多数对象的主“数据库”数据存储源,以及实现用户对象的另一个“ldap”源。在这种情况下,用户可以选择来自 LDAP 源,可能具有稍微不同的功能(例如,无法保存/更新用户对象),但应用程序以相同的方式使用它。另一种数据存储类型可能是 Web 服务或外部数据库。

我们正在考虑通过两种主要方式来实现这一点,我和一位同事在基本层面上存在分歧,这是正确的。我想就哪一个最好用一些建议。我会尽量保持对每一个的描述尽可能中立,因为我在这里寻找一些客观的观点。

  • 业务对象是基类,数据存储对象继承业务对象。客户端代码处理数据存储对象。

    在这种情况下,每个数据存储对象都继承了通用的业务规则,而客户端代码直接使用的是数据存储对象。

    这意味着客户端代码确定对给定对象使用哪种数据存储方法,因为它必须显式声明该类型对象的实例。客户端代码需要明确知道它使用的每种数据存储类型的连接信息。

    如果数据存储层为给定对象实现不同的功能,客户端代码在编译时明确知道它,因为对象看起来不同。如果数据存储方式发生变化,客户端代码也必须更新。

  • 业务对象封装了数据存储对象。

    在这种情况下,业务对象直接由客户端应用程序使用。客户端应用程序将基本连接信息传递给业务层。由业务对象代码决定给定对象使用哪种数据存储方法。连接信息将是从配置文件中获取的一大块数据(客户端应用程序并不真正了解/关心它的细节),它可能是数据库的单个连接字符串,也可能是各种数据存储类型的多个连接字符串。其他数据存储连接类型也可以从另一个位置读取 - 例如,数据库中的配置表指定各种 Web 服务的 URL。

    这样做的好处是,如果将新的数据存储方法添加到现有对象,则可以在运行时设置配置设置以确定使用哪种方法,并且对客户端应用程序完全透明。如果给定对象的数据存储方法发生更改,则无需修改客户端应用程序。

  • 业务对象是基类,数据源对象继承自业务对象。客户端代码主要处理基类。

    这与第一种方法类似,但客户端代码声明了基本业务对象类型的变量,并且业务对象上的 Load()/Create()/etc 静态方法返回适当的数据源类型对象。

    此解决方案的架构与第一种方法类似,但主要区别在于为给定业务对象使用哪个数据存储对象由业务层而非客户端代码决定。

我知道已经有现有的 ORM 库提供了一些这样的功能,但现在请打折扣(数据存储层有可能是用这些 ORM 库之一实现的) - 另请注意,我故意不告诉你这里使用的是什么语言,除了它是强类型的。

我在这里寻找一些关于哪种方法更好使用(或随意提出其他建议)以及原因的一般建议。

0 投票
6 回答
21073 浏览

java - 何时使用 Hibernate/JPA/Toplink?

现在我正在制作一个非常简单的网站——大约 5 页。问题是集成某种数据库映射解决方案是否过于矫枉过正并且值得花时间,或者是否最好只使用普通的旧 JNDI。我可能需要从数据库中读取/写入十几个东西。我想我对这些技术有基本的了解,但仍然需要大量参考文档。其他人之前面临过这个决定吗?

编辑:对不起,我应该指定 JNDI 来查找数据库连接和 JDBC 来执行操作。

0 投票
4 回答
785 浏览

orm - ORM:手写模式还是自动生成的?

我应该为使用高级语言(如 Python、Ruby)开发的项目使用手写模式,还是应该让我的 ORM 解决方案自动生成它?最终,我需要在不破坏所有数据的情况下进行迁移。可以绑定到特定的 RDBMS,但如果可以以某种方式支持约束和过程等功能,那就太好了。

0 投票
3 回答
2444 浏览

orm - .NET 3.5 的 Castle-ActiveRecord 教程坏了?

有没有人尝试过使用 C# 3.5的 ActiveRecord介绍示例?我不知何故感觉样本完全错误或过时了。XML 配置完全错误:

应该 :

(如果我理解 nhibernate 配置语法正确..)

我想知道我做错了什么。在用户模型上调用 Count() 时出现“无法为用户执行 ExecuteQuery”异常。

不知道这可能是什么。教程源代码与页面上的源代码有很大不同(最明显的是 XML 配置),它是一个 VS2003 示例,在大多数情况下具有不同的语法(没有泛型等)。

有什么建议么?ActiveRecord 看起来很棒..

0 投票
5 回答
2012 浏览

c# - 如何将 ORM 用于其架构在运行时未知的数据库?

鉴于以下要求,我正在尝试利用 ORM:

1) 使用.NET Framework(最新的Framework 还可以)
2) 必须能够互换使用Sybase、Oracle、MSSQL
3) 架构大多是静态的,但也有动态的部分。

我对 SubSonic 和 NHibernate 有点熟悉,但并不深入。
我觉得 ORM 可以做我想做的事,但我现在不知道如何利用它。

SubSonic 可能不是最优的,因为它目前不支持 Sybase,并且我现在为它编写自己的提供程序超出了我的资源和能力。

对于#3(上图),有几个元数据表,它们描述了供应商可以“装订”到现有数据库的表。
我们将这些称为MetaTablesMetaFields

有一个基本的静态模式,ORM(NHibernate ATM)可以很好地处理它。
但是,供应商可以(物理地)将表添加到数据库中,只要他们还将数据添加到元数据表中以描述其结构即可。

我真正想要的是能够以某种方式用元数据(以它可以理解的方式)“喂养”ORM,并在那时让我能够操纵数据。

我的主要目标是减少我必须在这些动态表上构建的通用 SQL 语句的数量。
我还想避免担心发送到 Sybase、Oracle 或 MSSQL 的 SQL 的差异。

我的主要问题是我无法让 ORM 知道动态表,直到运行时才能访问元数据

编辑:使用示例可能类似于此处概述的示例:

IDataReader rdr=new Query("DynamicTable1").WHERE("ArbitraryId",2).ExecuteReader();

(但是,SubSonic 似乎无法工作,因为没有 Sybase 提供程序(见上文)

0 投票
7 回答
112583 浏览

database - 单元测试数据库驱动应用程序的最佳策略是什么?

我使用许多由后端复杂程度不同的数据库驱动的 Web 应用程序。通常,有一个独立于业务和表示逻辑的ORM层。这使得对业务逻辑进行单元测试相当简单;事物可以在离散模块中实现,并且测试所需的任何数据都可以通过对象模拟来伪造。

但是测试 ORM 和数据库本身总是充满问题和妥协。

多年来,我尝试了一些策略,但没有一个完全让我满意。

  • 使用已知数据加载测试数据库。针对 ORM 运行测试并确认返回正确的数据。这里的缺点是您的测试数据库必须跟上应用程序数据库中的任何模式更改,并且可能会不同步。它还依赖于人工数据,并且可能不会暴露由于愚蠢的用户输入而发生的错误。最后,如果测试数据库很小,它不会像缺少索引那样显示效率低下。(好吧,最后一个并不是真正应该用于单元测试的,但它并没有什么坏处。)

  • 加载生产数据库的副本并对其进行测试。这里的问题是您可能不知道在任何给定时间生产数据库中有什么。如果数据随时间变化,您的测试可能需要重写。

有人指出,这两种策略都依赖于特定的数据,单元测试应该只测试功能。为此,我看到建议:

  • 使用模拟数据库服务器,并仅检查 ORM 是否发送正确的查询以响应给定的方法调用。

您使用了哪些策略来测试数据库驱动的应用程序(如果有的话)?什么对你最有效?

0 投票
8 回答
1095 浏览

php - 我应该扩展这门课吗?(PHP)

我在 PHP 中创建了一个 ORM,我有一个类“ORM”,它基本上创建了一个与数据库表相对应的对象(我的目标是与 ActiveRecord 模式相似/相同的功能。)ORM 本身扩展了' Database',用于建立数据库连接。

所以,我可以打电话:

p>

ORM 类提供此功能(设置类属性,提供 save()、find()、findAll() 等方法),Customer 扩展 ORM。但是,将来我可能希望向 Customer(或我创建的任何其他模型)添加额外的公共方法,那么这是否应该扩展 ORM?

我知道我在这里没有提供太多信息,但希望这可以通过模糊的解释来理解,而不是发布 300 多行代码。

0 投票
4 回答
1441 浏览

orm - 将 Subsonic 用于可能被大量访问的 ASPNET MVC 应用程序

我即将为一个可能被大量访问的 ASPNET MVC 应用程序启动一个项目,并且我正在考虑将 Subsonic 用于我的 DAL。我对 Subsonic 处理数千个并发请求的能力有些担心。谁能给我一些使用 Subsonic 的流行网站的例子?此外,如果您对除了 NHibernate 之外的 Subsonic 的可能替代品有任何建议,那也很好。谢谢