See*_*een 2 asp.net-mvc search entity-framework repository
我有一个关于如何在ASP.net MVC中为存储库模式实现多个条件的问题.想象一下EF4中的POCO课程
public class people
{ String Name {get;set;}
float Height {get;set;}
float Weight {get;set;}
int age {get;set;}
....
}
Run Code Online (Sandbox Code Playgroud)
如果我建立一个存储库IPeopleRepository,我应该为多标准搜索实现什么样的方法(例如Age> 30,Height> 80).这些标准与类中的属性有关,一些输入可能为null.当然我可以写一个像这样的方法
People SearchPeople (int age, float height.....)
但我必须判断每个变量是否为null并附加到搜索查询中.
那么你对如何在EF中实现这个功能有什么好的想法吗?
这听起来像是在寻找像规格模式这样的东西.
有涉及EF4/POCO /存储库/规格模式一个伟大的文章在这里.
虽然我喜欢这种模式,但我发现在简单的场景中它有点矫枉过正.
我最终使用了"管道和过滤器"技术 - 基本上是IQueryable<T>对象的扩展方法,使您的存储库代码流畅.
但是对于搜索条件,我很想让消费代码提供谓词,那么你不必担心参数.
所以定义是这样的:
public People SearchPeople(Expression<Func<People,bool>> predicate)
{
return _context.People.SingleOrDefault(predicate);
}
Run Code Online (Sandbox Code Playgroud)
然后代码只提供谓词.
var person = _repository.SearchPeople(p => p.Age > 30 && p.Height > 80);
Run Code Online (Sandbox Code Playgroud)
有些人不喜欢这种技术,因为它给消费者提供了太多的"力量",因为他们可能提供类似的谓词p.Id > 0并返回数据库中的所有行.
要抵消这种情况,请为maxRows提供可选参数.如果未提供,则默认为100行.
| 归档时间: |
|
| 查看次数: |
3796 次 |
| 最近记录: |