Могу ли я иметь динамически обновляемый dataContext? - PullRequest
0 голосов
/ 04 марта 2011

Я использую DataContexts для 90% моего доступа к данным. Но если, например, Пользователь1 изменяет запись, а Пользователь2 запрашивает DataContext, он не увидит изменений. Поэтому я воссоздаю свой DataContext КАЖДЫЙ раз, когда я получаю доступ к данным (перед каждым использованием LINQ to SQL).

Должен быть лучший способ запроса таблиц! Либо мне нужно синхронизировать DataContexts с таблицами, либо я должен найти способ напрямую запрашивать таблицы.

Любая помощь будет оценена!

Спасибо!

Ответы [ 3 ]

3 голосов
/ 04 марта 2011

Поэтому я воссоздаю свой DataContext КАЖДЫЙ раз, когда я получаю доступ к данным (перед каждым использованием LINQ to SQL).Должен быть лучший способ запроса таблиц!

Нет, лучшего способа нет и он не нужен.

Создание DataContext относительно дешево, единственной дорогой частью является Connection, и это обрабатывается ConnectionPool.

Таким образом, вы можете просто думать и рассуждать с точки зрения запросов (они являются реальными затратами) и альтернативных кэшируемых наборов результатов.

2 голосов
/ 04 марта 2011

Я полагаю, что вы можете неправильно понять природу DataContext.

В большинстве случаев вы захотите создать экземпляр DataContext с помощью оператора Using.В операторе Using вы должны затем продолжить выполнение ваших запросов LINQ для ваших операций CRUD.

using (YourDataContext ctx = new YourDataContext()) {
    someTable stObj = (from st in ctx.someTable
                       select st).FirstOrDefault();

    stObj.SomeColumn = 1001;

    ctx.SaveChanges();
}

Любой другой DataContext, открытый после вышеупомянутого DataContext, увидит изменениякоторые были сделаны в SomeColumn.

2 голосов
/ 04 марта 2011

Вы можете очистить кэш в Linq2Sql согласно следующему сообщению в блоге:

http://blog.robustsoftware.co.uk/2008/11/clearing-cache-of-linq-to-sql.html

Автор также помещает код в метод расширения для нас :)

Примечание: вам, вероятно, потребуется изменить контекст в сигнатуре метода. Как только это будет сделано, вы можете вызвать db.ClearCache (); и все это будет прекрасно ... тм.

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

НТН,

Stu

...