Служба данных ADO.NET не обновляется динамически - PullRequest
1 голос
/ 21 июня 2009

Мое приложение представляет собой клиент-серверное решение, использующее службу данных ADO.NET. Служба данных предоставляет TransactionSummaryData следующим образом:

public IQueryable<TransactionSummary> TransactionSummaries
{
    get { return MainForm.transactionSummaryData.Items.AsQueryable(); }
}

TransactionSummaryData имеет тип TransactionSummaries, свойство items которого определяется следующим образом:

public List<TransactionSummary> Items

На стороне клиента у меня есть несколько элементов управления, связанных с запросом LINQ, который работает с TransactionSummaries:

AvailibilityBox.DataContext = (from salesdata in srv.TransactionSummaries
                               where salesdata.PerformanceID == selectedshow.performancedata.PerformanceID
                               select salesdata);

Это выполняется многократно, так как selectedshow.performancedata.PerformanceID изменяется в ответ на переход пользователя по пользовательскому интерфейсу.

Пока все хорошо. Тем не менее, когда TransactionSummaryData на сервере обновляется с помощью некоторого другого кода на сервере, клиент продолжает отображать «устаревшие» данные и не замечает обновления. Я предполагаю, что это из-за какого-то кеширования. После отладки кода я вижу, что сервер отправляет правильные данные, но запрос LINQ на клиенте продолжает возвращать устаревшие данные. Перезапуск клиента приводит к отображению правильных данных.

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

Ответы [ 2 ]

1 голос
/ 06 июля 2009

Эмре Мерик на форумах Microsoft сумел ответить на мой вопрос:

Параметром слияния по умолчанию для DataServiceContext является AppendOnly, что означает, что если объект, возвращаемый запросом, уже отслеживается контекстом, в него не будет внесено никаких изменений. Вы можете установить MergeOption в OverwriteChanges, если хотите, чтобы сущность постоянно обновлялась из постоянного хранилища.

Ссылка MSDN

0 голосов
/ 21 июня 2009

Если вы установите для свойства DataContext «ObjectTrackingEnabled» значение false, ваша проблема, надеюсь, исчезнет. Смотрите ссылку MSDN здесь:

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.objecttrackingenabled.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...