gpt4 book ai didi

.net - 使用 DataContext.GetTable() 获取 'QueryProvider'

转载 作者:行者123 更新时间:2023-12-01 13:03:45 26 4
gpt4 key购买 nike

DataContext.GetTable() 方法将返回一个类型的对象:

系统.Data.Linq.Table

通过这样做,我假设我没有发出对数据库的调用来检索整个表。否则,LINQ 会有些低效。

因此,我所做的只是深入我的强类型 Datacontext 类(例如,dbDataContext)以获取其“Customers”属性的句柄,该属性代表 SQL Server 中的 Customers 表。

然后我可以从 GetTable() 返回的对象中获取 IQueryable,但仍然没有访问数据库。即,我的“服务层”代码将是 LINQ to Objects 而不是 Linq to Sql。

通过执行所有这些操作,我将减少所需的存储库数量。

问题:

以上假设是否正确?

注意事项:

我正在尝试找出一种方法来使用接口(interface)和泛型来构建我的查询,以使其可测试以及所有这些事情。

因此,按照@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 代码。

我怀疑我必须编写一个包装器接口(interface)来获取 IMongoDatabase 数据库变量的等价物。

但是,问题是上面的问题,而不是其他问题。就像我说的,我只是在这里学习。这部电影不会伤害任何生产代码。

最佳答案

对您的问题的简短回答是您的假设是正确的。您不通过 GetTable<>() 访问数据库DataContext 的方法.而且,当你得到 IQueryable在枚举数据库之前,您也不会访问数据库。

此外,看看这是否对您的任务有帮助:Advantage of creating a generic repository vs. specific repository for each object?

关于.net - 使用 DataContext.GetTable<T>() 获取 'QueryProvider',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com