2012-12-19 27 views
6

我想为linqpad创建驱动程序,有问题:为linqpad创建DynamicDataContextDriver用C#

当我创建DynamicDataContextDriver,我必须创建TypedDataContext类。

  1. 我应该把什么呢?
  2. 它将如何填充?
  3. 我可以控制它将如何填充?
  4. 如果我在这里使用对象数据库,有什么我必须牢记的吗?

我找到了一些答案here,但我找不到所有上述答案。

回答

3

类型化的数据的上下文是简单地用合适的用于查询的属性/字段的类。这些属性/字段通常会返回IEnumerables或IQueryables。例如:

public class TypedDataContext 
{ 
    public IEnumerable<Customer> Customers { get { ... } } 
    public IEnumerable<Order> Orders { get { ... } } 
    ... 
} 

当您使用Visual Studio创建一种新的项目“LINQ to SQL类”或“ADO.NET实体数据模型”时,Visual Studio为您创建一个类型化的数据上下文这是一个LINQPad期望的例子。类型化的数据上下文还可以公开方法(例如映射存储过程或函数) - 实际上它可以暴露对最终用户有意义的任何事情。

当您执行在LINQPad查询,有一个连接,LINQPad子类与连接,以便查询访问其所有字段/属性相关联的类型的数据上下文。这就是为什么Customers.Dump()是一个有效的查询 - 我们只需访问Customers而不必首先实例化类型化的数据上下文。

LINQPad驱动程序可以以两种方式之一工作。或者它可以像Visual Studio和自动和动态(动态数据上下文驱动器)构建类型化的数据的上下文,也可以从现有的组件由用户(静态数据上下文驱动器提供提取类型化的数据的上下文)。当您添加在LINQPad的连接,你会发现,司机在两个列表框中列出(构建数据上下文自动 = 动态驱动从自己的组装 = 静态驱动程序使用类型化的数据上下文)。

无论何时执行查询,都会实例化类型化的数据上下文。因为它的属性通常会返回延迟评估的IEnumerables/IQueryables,所以考虑“填充”它是没有帮助的。但是,它需要知道如何访问基础数据源,并且这是通过passing arguments into the constructor完成的。

LINQPad保持正常运行查询的查询的应用领域还活着,这可能与高速缓存和优化你应该写一驱动程序对象数据库有用。除此之外,对象数据库不应该有任何特殊的考虑。