使用c#为linqpad创建DynamicDataContextDriver

时间:2012-12-19 12:07:39

标签: c# linq linqpad

我正在尝试为linqpad创建驱动程序并提出疑问:

当我创建DynamicDataContextDriver时,我必须创建课程TypedDataContext

  1. 我应该放什么?
  2. 如何填充?
  3. 我可以控制如何填充它吗?
  4. 如果我在这里使用对象数据库,有什么我必须记住的吗?
  5. 我找到了一些答案here,但我找不到上述所有答案。

1 个答案:

答案 0 :(得分: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一样自动构建类型化数据上下文(动态数据上下文驱动程序),也可以从用户提供的现有程序集中提取类型化数据上下文(< em> static 数据上下文驱动程序)。在LINQPad中添加连接时,您会注意到驱动程序列在两个列表框中(自动构建数据上下文 = 动态驱动程序使用来自您自己的程序集的类型化数据上下文 = 静态驱动程序)。

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

LINQPad通常在查询运行之间保持查询的应用程序域处于活动状态,如果您正在为对象数据库编写驱动程序,这可能对缓存和优化很有用。除此之外,对象数据库不应该有任何特殊注意事项。