Данные представления SQL не обновляются должным образом - PullRequest
1 голос
/ 15 мая 2009

У меня есть две таблицы (Knicks и Knacks) и представление, которое объединяет две таблицы (PaddyWhacks). Таблицы имеют следующие поля:

Knicks.key, Knicks.data1

Knacks.fkey, Knacks.data2

Итак, представление содержит:

PaddyWhacks.key, PaddyWhacks.data1, PaddyWhacks.data2

Я использую LINQ to SQL, чтобы получить полное представление как IQueryable, и все выглядит хорошо. После этого я беру строку из Knicks и обновляю ее:

Knick k = db.Knicks.Single(row => row.data1 == 5);
k.data1 = 6;
db.SubmitChanges();

Я знаю, что обновление корректно, потому что если я выполню Count () для Knicks, где data1 == 5, результат изменится (и я могу заглянуть в базу данных и увидеть изменения). Однако, если я снова получу Paddywhacks, используя:

IQueryable<PaddyWhack> rows = from row in db.PaddyWhacks select row;

Соответствующее значение data1 равно 5.

Приложение работает на размещенном веб-сервере, и если я подожду достаточно долго и вернусь, чтобы повторить попытку, я увижу обновленное значение в представлении IQueryable. Я предполагаю, что что-то кэшируется, и, возможно, LINQ не вернется обратно в базу данных, чтобы получить данные снова. Есть ли какая-либо функция LINQ или SQL Server, о которой мне нужно знать, чтобы решить проблему?

Ответы [ 2 ]

1 голос
/ 19 мая 2009

Вы можете попробовать обновить DataContext следующим образом:

dc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, rows);
1 голос
/ 15 мая 2009

Я не использую linqtosql, но вы правы, что что-то находится в кеше. Представление - это просто «макро» запрос, данные - это данные из исходных таблиц, поэтому они всегда актуальны. Я бы попытался использовать функцию, отличную от IQueryable (), или создать новое соединение, а затем выполнить запрос.

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