Пошаговое руководство. Использование временной метки с управляющим элементом LinqDataSource для проверки целостности данных

Visual Studio 2010

Обновлен: Ноябрь 2007

В этом пошаговом руководстве, Вы узнаете как использовать временную метку для проверки конфликтов даты при обновлении даты при помощи элемента управления LinqDataSource. Элемент управления LinqDataSource хранит значение временной метки веб-странице. Когда пользователь обновляет или удаляет дату, элемент управления LinqDataSource сверяет значение временной метки с текущим значением временной метки в базе данных. Если элемент управления LinqDataSource указывает, что значение в столбце временной метки было изменено, управляющий элемент не обновит и не удалит запись. В этом случае запись была изменена при помощи другого процесса. Вместо этого элемент управления LinqDataSource вызывает исключение, которое указывает, что запись была изменена.

Столбец временной метки автоматически обновляется при помощи SQL Server каждый раз, когда запись была изменена. Дополнительные сведения см. в разделе Метка времени (Transact-SQL). В классе сущностей столбец временной метки отмечен тем, что свойство IsVersion установлено равным true.

Если Вы не используете столбец временной метки, элемент управления LinqDataSource проверяет параллелизм данным, сохраняя значения на веб-странице. Значения параллелизма состоят из столбцов, которые используются как первоначальный ключ в таблице или которые отмечены при помощи UpdateCheck.Always или UpdateCheck.WhenUpdated в свойстве UpdateCheck атрибута ColumnAttribute. LINQ в SQL проверяет эти значения в базе данных перед тем, как он обновит или удалит данные. Этот способ позволяет создать большую веб-страницу, если запись данных содержит много столбцов или большие значения столбцов. Он также представляет угрозу безопасности, если запись содержит данные, которые Вы не хотите отображать на странице.

Будет использовано Сред. Объектно-реляционный конструктор для создания класса, который представит таблицу базы данных. Элемент управления LinqDataSource взаимодействует с этим созданным классом для извлечения, обновления, вставки и удаления данных.

Для реализации процедур в собственной среде разработки вам потребуются:

  • Visual Web Developer, экспресс-выпуск или Visual Studio 2008.

  • Приложение SQL Server, экспресс-выпуск, установленное на компьютере. Если приложение SQL Server установлено, можно использовать его, однако необходимо внести незначительные изменения в некоторые процедуры.

  • Веб-узел ASP.NET.

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

Чтобы создать таблицу базы данных со столбцом временных меток

  1. Если веб-узел еще не содержит папку App_Data, то в окне Обозреватель решений щелкните правой кнопкой мыши проект, нажмите кнопку Добавить папку ASP.NET и затем нажмите App_Data.

  2. Щелкните правой кнопкой мыши папку App_Data и выберите команду Добавить новый элемент.

  3. В разделе Установленные шаблоны выберите База данных SQL, измените имя файла на Reviews.mdf, а затем нажмите кнопку Добавить.

  4. Откройте узел Reviews.mdf в обозревателе сервера и щелкните правой кнопкой мыши папку Таблицы.

  5. Нажмите кнопку Добавить новую таблицу.

  6. Создайте в таблице следующие столбцы:

    Имя столбца

    тип данных

    Свойства

    BookID

    целое

    IsIdentity = Yes

    Не NULL

    Первичный ключ

    Title

    nvarchar(50)

    Автор

    nvarchar(50)

    RecommendToBookGroup

    бит

    Не NULL

    Итог

    nvarchar(1000)

    Метка времени

    метка времени

    Не NULL

    Создайте таблицы базы данных
  7. Сохраните таблицу и дайте ей имя BookReviews.

  8. Добавьте несколько записей в таблицу BookReviews с данными для примера.

    В Обозреватель серверов, нажмите правой кнопкой мыши на таблицу BookReviews и нажмите Показать данные таблицы. Не нужно указывать значение для BookID или «Метка времени», т. к. эти значения генерируются базой данных.

Для работы с элементом управления LinqDataSource используются классы, представляющие сущности базы данных. Для создания этих классов можно использовать средства в Visual Web Developer, экспресс-выпуск или Visual Studio 2008.

Для создания класса для таблицы BookReviews

  1. Если веб-узел еще не содержит папку App_Code, то в окне Обозреватель решений щелкните правой кнопкой мыши проект, нажмите кнопку Добавить папку ASP.NET и затем нажмите App_Code.

  2. Щелкните правой кнопкой мыши папку App_Code и выберите команду Добавить новый элемент.

  3. В разделе Установленные шаблоны выберите Классы Linq to SQL, измените имя файла на Reviews.dbml, а затем нажмите кнопку Добавить.

    Откроется окно Реляционного конструктора объектов.

  4. В Обозревателе серверов, перетащите таблицу BookReviews в окно Реляционный конструктор объектов.

    Таблица BookReviews и ее столбцы представлены как запись с именем BookReview в окне конструктора.

    Просмотрите таблицу BookReview в реляционном конструкторе объектов
  5. Сохраните файл Reviews.dbml.

  6. В обозревателе решений откройте файл Reviews.designer.cs или Reviews.designer.vb.

    Запись сейчас имеет классы с именами ReviewsDataContext и BookReview. Атрибуты столбца для всех столбцов помечены при помощи UpdateCheck=UpdateCheck.Never. Однако, атрибут столбца для столбца временных меток помечен при помощи IsVersion=true.

  7. Закройте файл Reviews.dbml.

Теперь имеется таблица базы данных и классы, представляющие записи базы данных. Можно использовать элемент управления LinqDataSource на веб-странице ASP.NET для управления датой, которую следует отобразить или обновить.

Создание и настройка элемента управления LinqDataSource

  1. Создайте новую страницу ASP.NET в Visual Studio и перейдите в режим исходного кода.

  2. C вкладки Данныепанели элементов перетащите элемент управления LinqDataSource в элемент form на веб-странице.

    В качестве значения свойства идентификатора можно оставить LinqDataSource1.

  3. Присвойте свойству ContextTypeName значение ReviewsDataContext.

  4. Присвойте свойству TableName значение BookReviews.

  5. Установите свойствам EnableUpdate и EnableDelete значение true.

    В следующем примере демонстрируется декларативный код для элемента управления LinqDataSource.

    <asp:LinqDataSource 
      ContextTypeName="ReviewsDataContext" 
      TableName="BookReviews" 
      EnableUpdate="true" 
      EnableDelete="true" 
      ID="LinqDataSource1" 
      runat="server">
    </asp:LinqDataSource>
    

Теперь можно добавить элемент управления DetailsView и привязать его к элементу управления LinqDataSource. Элемент управления DetailsView позволяет пользователям отображать и обновлять дату, которая управляется элементом управления LinqDataSource.

Привязка управления DetailsView к дате из элемента управления LinqDataSource

  1. На вкладке Данныепанели элементов дважды щелкните элемент управления DetailsView, чтобы добавить его на страницу.

    В качестве значения свойства идентификатора можно оставить DetailsView1.

  2. Присвойте свойству DataSourceID значение LinqDataSource1.

  3. Присвойте свойству DataKeyNames значение BookID.

    Необходимо установить свойство DataKeyNames, если нужно использовать управляющий элемент DetailsView для обновления или удаления данных.

  4. Установите для свойства AllowPaging значение true.

  5. Установите свойствам AutoGenerateEditButton и AutoGenerateDeleteButton значение true.

    В следующем примере приведена декларативная разметка.

    <asp:DetailsView 
      DataSourceID="LinqDataSource1" 
      DataKeyNames="BookID" 
      AutoGenerateEditButton="true"
      AutoGenerateDeleteButton="true"
      AllowPaging="true" 
      ID="DetailsView1" 
      runat="server">
    </asp:DetailsView>
    

    В базе данных BookReviews, столбцы BookID и «Метка времени» автоматически устанавливаются базой данных. Пользователи не могут изменить значения.

  6. Сохраните изменения.

  7. Нажмите сочетание клавиш CTRL+F5, чтобы просмотреть страницу в обозревателе.

    Элемент управления DetailsView отображает поля данных для текущей записи из таблицы BookReviews.

  8. Закройте обозреватель.

Чтобы увидеть как метка времени исключает обновления при изменении данных, можно выполнить тест. Выберите запись для обновления на веб-странице и изменения этой же записи вне веб-страницы. При отправке обновления через веб-страницу, элемент управления LinqDataSource заблокирует обновление.

Чтобы проверить целостность данных

  1. Нажмите сочетание клавиш CTRL+F5, чтобы просмотреть страницу в обозревателе.

  2. Выберите запись и затем нажмите ссылку Редактировать. Не обновляйте пока что запись.

  3. В Обозреватель серверов, нажмите правой кнопкой мыши на таблицу BookReviews и нажмите Показать данные таблицы

  4. Измените значение в этой же записи при открытии в веб-обозревателе.

  5. Закройте окно, чтобы записать изменения в базу данных.

    Когда изменения будут сохранены, столбец временной метки для записи автоматически обновляется при помощи SQL Server.

  6. Измените значение в записи, которую требуется обновить, в веб-обозревателе.

  7. Нажмите ссылку Обновить.

    В этом случае появится сообщение об ошибке, в котором указывается состояние, в котором столбец был изменен. Временная метка, записанная на странице, не соответствует временной метке записи в базе данных.

    Если необходимо выполнить действие при отображении этой ошибки, можно создать обработчик для события Updating.

В этом пошаговом руководстве можно увидеть как оптимизировать проверку целостности данных при использовании элемента управления LinqDataSource. Можно получить дополнительные преимущества возможностей элемента управления LinqDataSource следующими способами:

Показ: