Итак, изучая LINQ2SQL (не говорите, что это мертвая технология, пожалуйста, я не переключаюсь на EF для простых приложений) Я много раз читал, что класс DataContext предназначен для частого создания и уничтожения. Отлично, легкий объект, который я могу использовать для доступа к своей базе данных. Однако на практике это, кажется, не вызывает никаких проблем. Например, если я загружаю DataGrid таким образом, изменения объектов сущности, кажется, не отслеживаются, и вызов DataContext.SubmitChanges не имеет никакого эффекта:
void LoadUI()
{
using( var db = new TestDataContext() )
{
// use DataLoadOptions.LoadWith<T> if we need
// access to foreign key/ deferred objects.
masterGrid.ItemsSource = db.Customers.ToList();
detailsGrid.ItemsSource = // this is always set to a collection of Settings
// for the currently selected user in masterGrid.
// just a simple foreign key relationship
}
}
void UpdateName( string newName )
{
using( var db = new TestDataContext() )
{
var customer = ((Customer)masterGrid.SelectedItem);
customer.Name = newName;
db.SubmitChanges() // !!! database is not updated !!!
}
}
Так что же дает? Создание нового объекта DataContext при доступе к БД представляется приемлемой / предпочтительной практикой, но, похоже, не работает в самых тривиальных случаях. Похоже, что отслеживание объектов не работает в этом сценарии, так как же можно использовать класс DataContext, как это на практике? Я что-то здесь упускаю? (Примечание: я действительно надеюсь, что мне не хватает чего-то простого.
Я должен предположить, что это так, но я пока не знаю, каков ответ. В настоящее время я просто держу один DC для жизни приложения, что, я знаю, не очень хорошая идея). Заранее благодарим за любой совет, который вы можете предложить.
Кстати, если кто-нибудь из вас знает исчерпывающую статью / серию статей, в которых описываются входы и выходы класса DataContext, я бы с удовольствием его прочитал. Я не нашел примеров, которые выходят за рамки тривиальных обновлений / вставок / удалений.