LINQ to SQL - метод, запущенный во второй раз, не возвращает изменения данных, произошедшие с первого раза - PullRequest
0 голосов
/ 31 августа 2010

Я создал метод в моем контексте данных, который сопоставлен с хранимой процедурой SQL. Этот метод используется в приложении ASP.NET и вызывается дважды в жизненном цикле страницы. Он возвращает один и тот же объект в обоих случаях (т.е. один и тот же первичный ключ).

После 1-го вызова вносятся некоторые изменения данных, поэтому при 2-м вызове хранимая процедура возвращает ту же запись, но с другими значениями свойств. Если я использую отладчик и SQL Profiler, я могу абсолютно точно проверить, что возвращаемая запись имеет тот же PK, но разные значения свойств между первым и вторым вызовами.

Однако при втором вызове объект, возвращаемый методом, идентичен объекту, возвращенному при первом вызове. Это похоже на то, как если бы LINQ запустил хранимую процедуру, но затем полностью проигнорировал результаты, решив вместо этого, что данные не могли измениться с момента первого запуска, поэтому он также может возвратить копию исходного объекта, если это произошло держаться!

Я экспериментировал с установкой ObjectTrackingEnabled объекта datacontext в false непосредственно перед вызовом моего метода, но это лишает меня возможности ссылаться на связанные объекты.

Вот код, который я использую для вызова метода:

Dim stl = _DataContext.GetMyStatus(SelectedUserID)
Dim st As MyStatus= stl.FirstOrDefault

Мне действительно нужно иметь возможность вызывать этот метод более одного раза в течение жизненного цикла страницы и чтобы он точно отражал текущее состояние базы данных, так как мне это сделать?

1 Ответ

1 голос
/ 31 августа 2010

DataContext создает один экземпляр на значение первичного ключа.Он заполняет этот единственный экземпляр в первый раз, когда видит запись, а затем возвращает этот экземпляр для любых будущих запросов с этим ключом.

Если вы хотите обновить значение существующего экземпляра из базы данных, используйте метод Refresh.

Мне действительно нужно иметь возможность вызывать этот метод более одного раза в жизненном цикле страницы и точно отражать текущее состояние базы данных.

Не делитесь данными между различными запросами страницы.

...