首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用PLINQO生成的数据时使用存储库模式?

在使用PLINQO生成的数据时使用存储库模式?
EN

Stack Overflow用户
提问于 2010-06-16 09:51:31
回答 1查看 414关注 0票数 0

我正在“升级”一个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);我不确定我是否喜欢在我的控制器中有这样的代码。

你对此有何看法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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模式,并且被设计为在较小的受控范围内良好地工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3050228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档