问题描述
|
有关存储库模式和查询对象模式的问题。我使用的是EF 4,并且已在VS 2010中使用ADO.NET POCO实体生成器从数据库模型中生成了POCO类。edmx文件和tt文件(POCO类)位于2个不同的项目中。
我的存储库是特定于域的,例如DocumentRepository和UserRepository。我的数据库模型与域模型的不同之处在于,我已经实现了映射程序,以便将域对象转换为一个或多个数据库表(反之亦然)。一个示例是,我的Document域类在数据库中建模为3个表(因此也建模为POCO类)。
在这种情况下使用域对象时,您将如何实现查询对象模式?我所看到的方式是我必须基于POCO类而不是域类编写查询对象?但这不会破坏存储库模式吗?
解决方法
ORM通常以直接与域对象一起使用的方式使用;它从数据库中加载它们并将它们持久保存到数据库中。您将再执行一个抽象步骤,即仅使用ORM实体填充自定义对象。您的自定义对象完全超出了ORM工具的范围,并且您不能期望ORM工具会为您提供对基于域对象之上的查询的任何支持。您必须建立自己的查询支持,并将域查询转换为存储库内的ORM查询。这通常是通过实现规范模式来完成的。
顺便说一句。在这种情况下,POCO并不太有意义-POCO适用于您要将其用作域对象的情况。