Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强类型DataContext是如何工作的?_C#_Sql_Linq_Linq To Sql - Fatal编程技术网

C# 强类型DataContext是如何工作的?

C# 强类型DataContext是如何工作的?,c#,sql,linq,linq-to-sql,C#,Sql,Linq,Linq To Sql,这是一个深入的延续,我仍然感到困惑。我正在为我的应用程序使用一个强类型的DataContext,虽然它会发出警告,但它神奇地工作了。它是如何做到这一点的 下面是使用LINQtoSQL连接数据库时通常使用的代码 class MyDatabase : DataContext { public Table<Widget> Widgets; public Table<Car> Cars; public MyDatabase (string connection) :

这是一个深入的延续,我仍然感到困惑。我正在为我的应用程序使用一个强类型的DataContext,虽然它会发出警告,但它神奇地工作了。它是如何做到这一点的

下面是使用LINQtoSQL连接数据库时通常使用的代码

class MyDatabase : DataContext {
  public Table<Widget> Widgets;
  public Table<Car> Cars;

  public MyDatabase (string connection) : base(connection) { } 
}
Widgets
似乎是
MyDatabase
类的一个字段。在我的代码中,我没有把它分配给任何东西。但在其他地方,我从中阅读,它有价值。为什么?

在LINQ to SQL的其他示例中,包括由Visual Studio 2008的DBML布局工具生成的代码,数据上下文类可能如下所示:

public partial class MyDatabase : DataContext {
  public Table<Widget> Widgets {
    get {
      return GetTable<Widget>();
    }
  }
}
公共部分类MyDatabase:DataContext{ 公共表小部件{ 得到{ 返回GetTable(); } } } 注意包含了
partial
GetTable
。是否需要
部分


我假设我的第一个示例最终调用了
GetTable
,但这段代码来自哪里?我的数据上下文类的字段是如何用数据填充的?

如果它们不是属性,唯一的逻辑结论是基本构造函数已经分配了它们。也许出乎意料,但并非不可能

partial
允许您将多个代码文件合并到一个类中;只有在分离了代码文件(通常用于设计器)的情况下才需要它


一些深入反射器的研究表明,ctor调用
私有void InitTables(objectschema)
,它确实做到了这一点(通过
GetTable(Type)
对字段进行反射)!那么,从今天早上开始回答我的问题,这是假的吗?就像编译器无法感知构造函数中的反射一样,对吗?@Mark-right。警告不正确:编译器无法检测反射。
public partial class MyDatabase : DataContext {
  public Table<Widget> Widgets {
    get {
      return GetTable<Widget>();
    }
  }
}