dataContext.getTable()方法将返回类型为的对象:
system.data.linq.表
通过这样做,我想我还没有对数据库发出调用来检索整个表。否则,Linq会有些效率低下。
因此,我所做的一切就是钻取到我的强类型DataContext类(例如,DBDataContext)中,以获取其表示SQL Server中客户表的“客户”属性的句柄。
然后,我可以从gettable()返回的对象中获取一个iqueryable,但仍然没有命中数据库。也就是说,我的“服务层”代码将是对象的LINQ,而不是SQL的LINQ。
通过这样做,我将减少我需要的存储库的数量。
问题:
上述假设是否正确?
注:
我正试图找出一种方法来构建我的查询,使用接口和泛型使其具有可测试性,以及所有这些。
因此,按照@zowen对以下问题的回应:
Repository pattern: One repository class for each entity?
我正在努力实现
public interface IQueryProvider<T>
{
TResult Query<TResult>(Func<IQueryable<T>, TResult> query);
}
我知道这并不是绝对必要的,但是我正在经历学习的过程,看看适合我的架构选项以及我的想法。
我想做的是:
我正在尝试为SQL Server而不是MongoDB实现以下功能:
public class MongoQueryProvider<T> : IQueryProvider<T>
{
private readonly IMongoCollection<T> collection;
public MongoQueryProvider(IMongoDatabase database)
{
this.collection = database.GetCollection<T>();
}
public TResult Query<TResult>(Func<IQueryable<T>, TResult> query)
{
return query(this.collection.Linq());
}
}
我想要的是获得gettable()的句柄,然后针对它编写服务层LINQ代码。
我怀疑我必须编写一个包装器接口来获得相当于imongodatabase数据库变量的值。
然而,问题是上述问题,而不是这另一个问题。就像我说的,我只是在这里学习。在这部电影中,任何制作代码都不会受到伤害。