0

关于存储库模式和查询对象模式的问题。我正在使用 EF 4,并使用 VS 2010 中的 ADO.NET POCO 实体生成器从我的数据库模型生成了我的 POCO 类。edmx 文件和 tt 文件(POCO 类)位于 2 个不同的项目中。

我的存储库是特定于域的,例如 DocumentRepository 和 UserRepository。我的数据库模型与我的域模型的不同之处在于我已经实现了映射器,以便将域对象转换为一个或多个数据库表(反之亦然)。一个例子是我的 Document 域类在数据库中被建模为 3 个表(因此也是 POCO 类)。

在这种情况下使用域对象时,您将如何实现查询对象模式?我看到它的方式我必须基于 POCO 类而不是域类编写查询对象?但这不会破坏存储库模式吗?

4

1 回答 1

3

ORM 通常以直接与域对象一起工作的方式使用 = 它从数据库加载它们并将它们持久化到数据库。您正在做一个抽象步骤,您使用 ORM 实体只是为了填充您的自定义对象。您的自定义对象完全超出了您的 ORM 工具的范围,您不能期望 ORM 工具会为您提供任何对在您的域对象之上构建的查询的支持。您必须构建自己的查询支持并将域查询转换为存储库中的 ORM 查询。这通常通过实现规范模式来完成。

顺便提一句。在这种情况下 POCO 没有太大意义 - POCO 适用于您希望将它们用作域对象的场景)。

于 2011-05-30T08:34:08.533 回答