类型化数据上下文只是一个具有适合查询的属性/字段的类。这些属性/字段通常会返回 IEnumerables 或 IQueryables。例如:
public class TypedDataContext
{
public IEnumerable<Customer> Customers { get { ... } }
public IEnumerable<Order> Orders { get { ... } }
...
}
Run Code Online (Sandbox Code Playgroud)
当您使用 Visual Studio 创建“LINQ to SQL 类”或“ADO.NET 实体数据模型”类型的新项目时,Visual Studio 会为您创建一个类型化数据上下文,这是 LINQPad 所期望的一个很好的示例。类型化数据上下文还可以公开方法(例如,映射存储过程或函数)——事实上,它可以公开对最终用户有意义的任何内容。
当您在具有连接的 LINQPad 中执行查询时,LINQPad 会对与该连接关联的类型化数据上下文进行子类化,以便查询可以访问其所有字段/属性。这就是为什么Customers.Dump()是一个有效的查询 - 我们可以直接访问,Customers而不必首先实例化类型化数据上下文。
LINQPad 驱动程序可以以两种方式之一工作。它可以像 Visual Studio 一样自动动态构建类型化数据上下文(动态数据上下文驱动程序),也可以从用户提供的现有程序集中提取类型化数据上下文(静态数据上下文驱动程序)。当您在 LINQPad 中添加连接时,您会注意到驱动程序列在两个列表框中(自动构建数据上下文=动态驱动程序,以及使用您自己的程序集中的类型化数据上下文=静态驱动程序)。
每当执行查询时,都会实例化类型化数据上下文。因为它的属性通常返回延迟计算的 IEnumerables/IQueryables,所以考虑“填充”它没有帮助。但是,它需要知道如何访问底层数据源,这是通过将参数传递到构造函数中来完成的。
LINQPad 通常会在查询运行之间保持查询的应用程序域处于活动状态,如果您正在为对象数据库编写驱动程序,这对于缓存和优化可能很有用。除此之外,对于对象数据库不应该有任何特殊的考虑。