2017-01-20 1 views
0

У меня есть веб-приложение. Я создаю там, где у меня есть рабочий поток, содержащий ссылку на строку базы данных.Asp.net - как он обрабатывает ссылки на строки базы данных?

У меня есть внешняя служба, вызывающая веб-приложение, и в зависимости от ввода пользователя на их конце обновляет строки в базе данных.

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

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

Для ясности:

Этот указатель объект представляет собой одну строку в таблице базы данных:

Callout co = await db.Callouts.FindAsync(id); 
+0

Что вы подразумеваете под «содержит ссылку на строку базы данных», в частности? Вы имеете в виду, что он ссылается на объект [DataRow] (https://msdn.microsoft.com/en-us/library/system.data.datarow (v = vs.110) .aspx)? –

+0

У меня есть таблица в моей базе данных, например, называется «Shift_Offer». В моем рабочем потоке я держу ссылку на одну строку в этой таблице, которая описывается объектом Shift_Offer в моей модели, которая была сделана процессом обработки данных. Это вопрос MVC asp.net. –

+0

Я не знаю, что вы подразумеваете под «удерживать ссылку на одну строку в этой таблице». Вы не могли бы это понимать буквально. Сама таблица находится на другом поле и глубоко погружена в файл данных SQL. Вы имеете в виду ссылку на объект домена, который представляет строку в этой таблице? Возможно, вы можете опубликовать код. –

ответ

2

Самым модным словечком вы ищете Optimistic Concurrency Control.

Хотя кажется, что вы хотите катиться самостоятельно, вы можете не знать, что EF может сделать это для вас, если вы правильно настроили его.

Вам нужно будет добавить следующее к модели данных:

[Timestamp] 
public byte[] RowVersion { get; set; } 

Кроме того, вы должны добавить ConcurrencyCheckAttribute своим членам данных.

Наконец, вам нужно будет написать код для обработки OptimisticConcurrencyException.

Учебное пособие для этого с EF можно найти here.

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

+0

Да, это более или менее то, что я искал, спасибо. –