這是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