DataContext.GetTable() 方法将返回一个对象类型:
System.Data.Linq.Table
通过这样做,我假设我没有调用数据库来检索整个表。否则,LINQ 会有些低效。
因此,我所做的只是深入研究我的强类型 Datacontext 类(例如,dbDataContext)以获取例如它的“Customers”属性的句柄,该属性代表 SQL Server 中的 Customers 表。
然后,我可以从 GetTable() 返回的对象中获取 IQueryable,但仍然没有命中数据库。即,我的“服务层”代码将是 LINQ to Objects 而不是 Linq to Sql。
通过这样做,我将减少我需要的存储库的数量。
问题:
上述假设是否正确?
笔记:
我正在尝试找出一种方法来使用接口和泛型构建我的查询,以使其可测试以及所有这些。
因此,按照@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 数据库变量的等价物。
但是,问题是上述问题,而不是其他问题。就像我说的,我只是在这里学习。在这部电影中,任何生产代码都不会受到伤害。