Это подробное продолжение моего вопроса, сделанного ранее сегодня утром , о котором я до сих пор в тупике. Я использую строго типизированный 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-to-SQL, включая код, сгенерированный инструментом макета DBML в Visual Studio 2008, класс контекста данных может выглядеть так:
public partial class MyDatabase : DataContext {
public Table<Widget> Widgets {
get {
return GetTable<Widget>();
}
}
}
Обратите внимание на включение partial
и GetTable
. partial
необходим?
Я предполагаю, что мой первый пример работает, в итоге вызывая GetTable
, но тогда откуда этот код? Как поля моего класса контекста данных заполняются данными?