关于存储库模式和查询对象模式的问题。我使用的是EF 4,并在VS 2010中使用ADO.NET POCO实体生成器从数据库模型中生成了我的POCO类。edmx文件和tt文件(POCO类)位于两个不同的项目中。
我的存储库是特定于域的,例如DocumentRepository和UserRepository。我的数据库模型与域模型的不同之处在于,我实现了映射器,以便将域对象转换为一个或多个数据库表(反之亦然)。一个例子是,我的Document域类在数据库中被建模为3个表(因此也是POCO类)。
在这种情况下使用域对象时,您将如何实现查询对象模式?在我看来,我必须基于POCO类而不是域类来编写查询对象?但这不会打破存储库模式吗?
ORM通常以直接处理域对象的方式使用=从数据库加载它们并将它们持久化到数据库。您正在执行另一个抽象步骤,即使用ORM实体只填充自定义对象。您的自定义对象完全超出了ORM工具的范围,您不能指望ORM工具会为在域对象之上构建的查询提供任何支持。您必须构建自己的查询支持,并在存储库中将域查询转换为ORM查询。这通常是通过实现规范模式来完成的。
Btw。在这种情况下,POCO没有太大意义——POCO适用于您希望将其用作域对象的场景)。