![]() |
|
Модераторы: gambit |
![]()
|
|
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
Народ, столкнулся с такой траблой, хочу у всех своих записей вести версицирование. Если я добавляю поле Version типа int и помечаю атрибутом IsVersion = true, то я так понимаю Linq должен сам генрить версию или нет? Помогите разобраться с этим вопросом, как правильно генерить версию? Если я ставлю в бд инкрементацию на это поле, то получается пара проблем, во первых версия увеличивается на 1 при каждой новой вставке, а я так не хочу, я хочу что бы у каждой записи в БД велся свой порядок версий, а во вторых не проиходит обновление версии при обновлении поля.
Ручками делать не получается, т.к. если атрибут IsVersion выставлен то Linq не позволяет мне менять значение этого поля. Может быть надо юзать хранилки или триггеры? ПОмогите! Это сообщение отредактировал(а) Veitmen - 18.6.2008, 06:41 |
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
При этом мне не нужны byte[].
Это сообщение отредактировал(а) Veitmen - 18.6.2008, 09:30 |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 5 Всего: 62 |
Veitmen, используйте тип TimeStamp в SqlServer. Значение этого типа обновляется при любых изменениях в записи.
Не понял. Это сообщение отредактировал(а) Idsa - 18.6.2008, 10:50 |
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
||||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 5 Всего: 62 |
А зачем его менять? Оно же автоматически генерируется.
Дело обстоит так. Есть стандартное средство в виде типа TimeStamp, который хранит массив байт. Не знаю, чем Вам байты не угодили... но если хочется, чтобы эту функциональность выполняли int'ы, то Вам придется создать After Trigger на Update и Insert и обновлять это поле. И так с каждей таблицей... По крайней мере в рамках моих нынешних познаний Sql Server'а других вариантов я не вижу. |
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
ыыы Жестко блин.(( МОжет кто знает какое нибудь еще решение? Приведите пример триггера плиз, если ва не затруднит.
|
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 5 Всего: 62 |
Триггер здесь несложный... но для начала я хотел бы узнать, чем именно Вас не устраивает стандартное решение. Чем не угодил массив байт? Это сообщение отредактировал(а) Idsa - 18.6.2008, 11:21 |
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
Проблема у меня при сериализации и десириализации. Мы не хотим передавать байты...
|
|||
|
||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
Приведите пожалуйста пример триггера на инкремент.
|
|||
|
||||
| Idsa |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 5 Всего: 62 |
Ну ведь int тоже из байт состоит Для того чтобы было с чем сравнить, я все-таки написал триггер. Заранее предупреждаю, что в SQL я не мастер Есть таблица TestTable: Id Int NOT NULL Identity(1, 1) Name VarChar(10) Version Int Создаем для таблицы следующий тригер
Теперь пробуем последовательно выполнить в Management Studio сначала запрос на вставку:
, а потом обновляем запись с заданным Id:
После обновления значение Version увеличилось на единицу. Это упрощенная версия необходимого для решения Вашей задачи тригера. Например, стоит добавить условие, чтобы при переполнении счетчик сбрасывался на ноль. Это сообщение отредактировал(а) Idsa - 18.6.2008, 12:25 |
||||||
|
|||||||
| Veitmen |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
Idsa, спасибо что напомнил.
В общем решил задачу именно через триггеры. Не забываем указывать аттрибуты IsVersion и IsDbGenerate. Иначе Linq будет ругаться на изменение данных через триггеры. Вопрос решен. Idsa +1. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |