我喜欢的一种模式(我不知道它是否是公认的模式)是您在 DBContext 上创建扩展方法,它允许您加载包含查询的类。这意味着您可以在一定程度上划分您的查询。
public static XTypeQueries XTypeQueries(this EntityModel db)
{
return new XTypeQueries(db);
}
并在一个单独的文件中
public class XTypeQueries : QueryLibrary
{
public XTypeQueries (EntityModel db) : base(db) { }
public IQueryable<Object> DoSomeQuery()
{
return from ... in this.db...
select ...;
}
}
您从中扩展的查询库对象很简单
public abstract class QueryLibrary
{
protected readonly EntityModel db;
protected QueryLibrary(EntityModel db)
{
this.db = db;
}
}
这样做的结果是你可以做到
var query = new EntityModel().XTypeQueries.DoSomeQuery();
我尝试将方法保持为可查询的,以便在调用方法时您可以根据需要尽可能具体,而不会浪费大量处理。您现在拥有组合在一起的查询库,但就像您编写 Linq 内联一样。