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 在列举它之前,您也不会访问数据库。

另外,看看这是否可以帮助您完成任务: 为每个对象创建通用存储库与特定存储库的优点?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top