这是my question from earlier this morning的深入延续,我仍然难以理解。我为我的应用程序使用强类型的DataContext,虽然它发出警告,但它神奇地工作。它是如何做到的?强类型DataContext是如何工作的?
下面是通常用于使用LINQ to SQL连接到数据库的代码。
class MyDatabase : DataContext {
public Table<Widget> Widgets;
public Table<Car> Cars;
public MyDatabase (string connection) : base(connection) { }
}
即使它发出警告,它仍然可以使用。人们可以使用开始从它读:
using (var db = new MyDatabase(connectionString)) {
foreach (var w in db.Widgets)
Console.WriteLine(w);
}
Widgets
似乎是MyDatabase
类的字段。而在我的代码中,我没有把它分配给任何东西。但在其他地方,我正在阅读,它有价值。为什么?
在LINQ到SQL的其他实例,包括Visual Studio 2008中的DBML布局工具生成的代码,数据上下文类可能是这样的:
public partial class MyDatabase : DataContext {
public Table<Widget> Widgets {
get {
return GetTable<Widget>();
}
}
}
通知partial
和GetTable
列入。 partial
是必要的吗?
我假设我的第一个例子最终通过调用GetTable
工作,但是这个代码来自哪里?我的数据上下文类的字段是如何填充数据的?
Muy bueno!那么,从今天上午回答我的问题,这是虚假吗?尽管编译器无法感知构造函数中的反射,对吧? – 2010-02-01 20:00:20
@Mark - 正确。警告不正确:编译器无法检测反射。 – 2010-02-01 20:40:24