Questions tagged «specification-pattern»

4
LINQ to Entities无法识别该方法
尝试执行linq查询时出现以下错误: LINQ to Entities无法识别方法“ Boolean IsCharityMatching(System.String,System.String)”方法,并且该方法无法转换为商店表达式。 我已经阅读了很多以前的问题,人们会遇到相同的错误,如果我理解正确,那是因为LINQ to Entities要求将整个linq查询表达式转换为服务器查询,因此您不能调用外部方法在里面。我还无法将情景转换成可以正常使用的东西,而且我的大脑开始融化,所以我希望有人可以指出正确的方向。我们正在使用Entity Framework和规范模式(并且我都是新手)。 这是使用规范的代码: ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference); charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList(); 这是linq表达式: public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied() { return p => p.IsCharityMatching(this.charityName, this.charityReference); } 这是IsCharityMatching方法: public bool IsCharityMatching(string name, string referenceNumber) { bool exists = true; if (!String.IsNullOrEmpty(name)) { if …

4
设计良好的查询命令和/或规范
我一直在寻找很多时间来找到典型存储库模式(不断增长的专用查询方法列表等)所提出的问题的好的解决方案。请参阅:http : //ayende.com/blog/3955/repository-是新单人)。 我真的很喜欢使用Command查询的想法,特别是通过使用Specification模式。但是,我的规范问题是它仅涉及简单选择的标准(基本上是where子句),而没有处理其他查询问题,例如联接,分组,子集选择或投影等。基本上,许多查询必须经过所有额外的步骤才能获得正确的数据集。 (请注意:我在“命令”模式中使用“命令”一词,也称为查询对象。我并不是在谈论命令/查询分离,而是在查询和命令之间进行区分(更新,删除,插)) 因此,我正在寻找替代方案来封装整个查询,但仍具有足够的灵活性,以至于您不只是将意粉存储库换成大量的命令类。 我曾经使用过例如Linqspecs,虽然我发现能够为选择条件分配有意义的名称具有一定的价值,但这还远远不够。也许我正在寻找一种结合了多种方法的混合解决方案。 我正在寻找别人可能已开发出的解决方案,以解决此问题或解决其他问题,但仍满足这些要求。在链接的文章中,Ayende建议直接使用nHibernate上下文,但我认为这会使您的业务层大大复杂化,因为它现在还必须包含查询信息。 等待期过后,我将为此提供赏金。因此,请为您的解决方案提供值得的奖励,并提供良好的解释,我将选择最佳的解决方案,并支持亚军。 注意:我正在寻找基于ORM的东西。不必显式使用EF或nHibernate,但是它们是最常见的,并且最适合。如果它可以很容易地适应其他ORM,那将是一个好处。Linq兼容也很好。 更新:我真的很惊讶这里没有很多好的建议。似乎人们要么完全是CQRS,要么完全处于存储库阵营中。我的大多数应用程序都不够复杂,不足以保证CQRS(大多数CQRS倡导者很容易地说,您不应将其用于此)。 更新:这里似乎有些混乱。我不是在寻找新的数据访问技术,而是在业务和数据之间设计合理的接口。 理想情况下,我正在寻找的是查询对象,规范模式和存储库之间的某种交叉。就像我在上面说的那样,规范模式仅处理where子句方面,而不处理查询的其他方面,例如联接,子选择等。存储库处理整个查询,但过一会儿就会失去控制。查询对象还处理整个查询,但是我不想简单地用大量的查询对象代替存储库。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.