我正在“升级”一个MVC应用程序。以前,DAL是Model的一部分,作为使用标准LINQ to SQL查询的一系列存储库(基于实体名称)。现在,它是一个单独的项目,是使用PLINQO生成的。
由于PLINQO根据实体的属性生成查询扩展,因此我开始在控制器中直接使用它们……并一起删除了所有的存储库。
它工作得很好,这更多的是一个根据你的经验得出的问题,我应该继续沿着这条道路走下去,还是应该重新构建存储库(使用PLINQO作为存储库文件中的DAL )?
只使用PLINQO生成的数据上下文的一个好处是,当我需要DB访问时,我只引用数据上下文一次。在存储库模式下,当我需要数据访问时,我必须引用每个存储库,有时需要在单个控制器上引用多个存储库。
我在存储库上看到的最大好处是恰当地命名了查询方法(即FindAllProductsByCategoryId(int )等)。在PLINQO代码中,它是_db.Product.ByCatId(int )--这也不算太糟糕。
这两个我都喜欢,但是当查询使用谓词时,它变得“拦阻”了。我可以将其汇总到存储库查询方法中。但是在PLINQO代码中,它可能类似于_db.Product.Where(x => x.CatId == 1 && x.OrderId == 1);我不确定我是否喜欢在我的控制器中有这样的代码。
你对此有何看法?
发布于 2010-06-17 00:54:31
--查询扩展--
PLINQO的查询扩展被设计成可链接的。这应该有助于防止事情变得太“哈里”。;)
// Lambda
_db.Product.Where(x => x.CatId == 1 && x.OrderId == 1);
//查询扩展
_db.Product.ByCatId(1).ByOrderId(1);
//甚至更复杂的Lambda
_db.Product.Where(x => (x.CatId == 1 || x.CatId == 3) && x.OrderId != 1);
//查询扩展
_db.Product.ByCatId(1,3).ByOrderId(ComparisonOperator.NotEqual,1);
此外,对于真正复杂的查询,我们建议将自定义扩展方法添加到可编辑(被动生成)的查询扩展文件中。这允许您将更高级的逻辑封装到单个位置中,并保持代码更整洁,高级逻辑更具可重用性。
http://docs.codesmithtools.com/display/PLINQO/Query+Extensions
--模式--
至于模式,我们通常建议您在每次想要访问数据库时,在using语句中新建一个DataContext。LINQ to SQL (以及PLINQO)都在使用Unit of Work模式,并且被设计为在较小的受控范围内良好地工作。
https://stackoverflow.com/questions/3050228
复制相似问题