使用datacontext.gettable ()获得“ QueryProvider”
-
28-09-2019 - |
题
datacontext.gettable()方法将返回类型的对象:
system.data.linq.table
通过这样做,我假设我没有发出致电数据库来检索整个桌子的电话。否则,LINQ将有些降低。
因此,我所做的就是钻入我的强烈键入DataContext类(例如DBDataContext),以抓住一个句柄,例如,它的“客户”属性,代表SQL Server中的客户表。
然后,我可以从getTable()返回的对象中获得可视化的可声,但仍然没有打入数据库。即,我的“服务层”代码将是linq到对象而不是linq到SQL。
通过做所有这些,我将减少所需的存储库数量。
问题:
以上假设正确吗?
笔记:
我正在尝试找出一种使用接口和仿制药来构建查询的方法,以使其可测试和所有doo dah。
因此,按照 @Zowen对:
我正在尝试实施
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数据库变量等效。
但是,问题是上面的问题,而不是另一个问题。就像我说的,我只是在这里学习。这部电影不会受到任何生产代码。
解决方案
您问题的简短答案是您的假设是正确的。您不会通过 GetTable<>()
方法的方法 DataContext
. 。而且,当你得到一个 IQueryable
在列举它之前,您也不会访问数据库。
另外,看看这是否可以帮助您完成任务: 为每个对象创建通用存储库与特定存储库的优点?
不隶属于 StackOverflow