LINQ to SQL: принудительное изменение метки времени таблицы - PullRequest
2 голосов
/ 25 марта 2011

Я использую LINQ to SQL и мне нужна помощь в обновлении столбца метки времени в таблице.

Car candidate = Context.Cars.Where(c => c.CarID == car.Id).SingleOrDefault();
candidate.CarName = carToUpdate.CarName;
candidate.CarDescription = carToUpdate.CarDescription;
candidate.IsActive = carToUpdate.IsActive;
candidate.IsCab = carToUpdate.IsCab;
candidate.StockTypeId = carToUpdate.StockTypeId;
Context.SubmitChanges();

Если в свойствах объекта Car нет изменений, отметка времени не изменяется. (Похоже, LINQ to SQL достаточно умен, чтобы не отправлять обновления в базу данных).

Есть ли способ преднамеренно изменить метку времени с LINQ на SQL ??

Пожалуйста, помогите.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 25 марта 2011

Я читал Состояния объектов и отслеживание изменений (LINQ to SQL) , и в нем говорится:

Вы можете обнаруживать обновления, наблюдая уведомления об изменениях.Уведомления предоставляются через событие PropertyChanging в установщиках свойств.Когда LINQ to SQL получает уведомление о первом изменении объекта, он создает копию объекта и считает объект кандидатом на создание оператора Update.

Для объектов, которые не реализуют INotifyPropertyChanging, LINQ to SQLподдерживает копию значений, которые были у объектов, когда они были впервые материализованы.Когда вы вызываете SubmitChanges, LINQ to SQL сравнивает текущие и исходные значения, чтобы определить, был ли объект изменен.

Можно ли создать частичный класс, который добавляет свойство, вызывающее PropertyChangingобновить свойство, которое не отображается и существует только в коде?

0 голосов
/ 25 марта 2011

Как насчет добавления столбца LastUpdatedDate и установки его на DateTime.Now, это должно гарантировать, что оно всегда будет выполнять обновление, а затем изменит столбец отметки времени.

0 голосов
/ 25 марта 2011

Я думаю, что ответ - нет.

Если свойства сущности совпадают после того, как вы изменили их, как они есть, когда вы извлекли сущность из БД, она фактически не изменилась.

Какова цель принудительного создания новой отметки времени, когда строка фактически не обновлялась?

0 голосов
/ 25 марта 2011

Разве триггер в таблице SQL не является опцией?

РЕДАКТИРОВАТЬ: Я думаю, эта тема отвечает на ваш вопрос заставить LinqToSql отправить

...