Пошаговое руководство. Настройка операций вставки, обновления и удаления в классах сущностей

Обновлен: November 2007

Средство Реляционный конструктор объектов область конструктора для создания и редактирования классов LINQ to SQL (классов сущностей), которые базируются на объектах в базе данных. Используя LINQ to SQL, можно применить технологию LINQ для доступа к базам данных SQL. Дополнительные сведения см. в разделе LINQ.

По умолчанию логику для выполнения обновлений обеспечивает среда выполнения LINQ to SQL. Среда выполнения по умолчанию создает инструкции Вставить, Обновить и Удалить, основываясь на схеме таблицы (определения столбцов и информация о первичных ключах). Если вы не хотите использовать поведение по умолчанию, то можно конфигурировать поведение обновления и назначить конкретные сохраненные процедуры для выполнения команд Вставить, Обновить и Удалить, необходимых для работы с данными в базе данных. Можно также сделать это, когда поведение по умолчанию не сгенерировано, например, когда ваши классы сущностей сопоставляются с представлениями. Кроме того, можно отменить поведение обновления по умолчанию, когда база данных требует доступа к таблице через сохраненные процедуры. Дополнительные сведения см. в разделе Настройка операций с помощью хранимых процедур (LINQ to SQL).

Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

Для этого пошагового руководства требуется доступность хранимых процедур InsertCustomer, UpdateCustomer и DeleteCustomer для базы данных Northwind. Подробные сведения о создании этих сохраненных процедур см. в Пошаговое руководство. Создание хранимых процедур обновления данных для таблицы "Заказчики" базы данных "Борей".

Это пошаговое руководство обеспечивает действия, которые необходимо выполнить, чтобы отменить поведение по умолчанию среды выполнения LINQ to SQL для сохранения данных обратно в базе данных, используя сохраненные процедуры.

В этом пошаговом руководстве вы узнаете, как выполнить следующие задачи:

  • Создание нового приложения Windows Forms и добавление в него файла LINQ to SQL.

  • Создание класса сущностей, который сопоставляется с таблицей Northwind Customers.

  • Создание источника данных об объекте, который ссылается на класс LINQ to SQL Customer.

  • Создание приложения Windows Form, содержащего DataGridView, которое связано с классом Customer

  • Реализуйте для формы функциональные возможности сохранения.

  • Создайте методы DataContext путем добавления сохраненных процедур в Сред. Объектно-реляционный конструктор.

  • Сконфигурируйте класс Configure так, чтобы он использовал сохраненные процедуры Вставить, Обновить и Удалить.

Предварительные требования

Для выполнения данного пошагового руководства необходимо следующее:

Создание приложения и добавление классов LINQ to SQL

Поскольку вы будете работать с классами LINQ to SQL и отображать данные на Windows Form, создайте новой приложение Windows Forms и добавьте файл классов LINQ to SQL.

Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Для создания нового проекта Приложение Windows, которое содержит класса LINQ to SQL

  1. В меню Файл создайте новый проект.

  2. Назовите проект UpdatingwithSProcsWalkthrough.

    Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

    Конструктор Сред. Объектно-реляционный конструктор поддерживается в проектах Visual Basic и C#. Поэтому создайте новый проект на одном из этих языков.

  3. Выберите шаблон Приложение Windows Forms и нажмите кнопку OK. Дополнительные сведения см. в разделе Создание приложения для Windows.

    Проект UpdatingwithSProcsWalkthrough создастся и добавляется в Обозреватель решений.

  4. В меню Проект выберите команду Добавить новый элемент.

  5. Выберите шаблон LINQ to SQL Classes и введите с клавиатурыNorthwind.dbml в поле Имя.

  6. Нажмите кнопку Добавить.

    Пустой файл классов LINQ to SQL Classes (Northwind.dbml) добавляется в проект, и открывается Сред. Объектно-реляционный конструктор.

Создание класса сущностей Customer и источника данных об объекте

Создайте классы LINQ to SQL, которые сопоставляются с таблицами базы данных, путем перетаскивания таблиц из Обозревателя сервера/обозревателя базы данных на Сред. Объектно-реляционный конструктор. В результате получите классы сущностей LINQ to SQL, которые сопоставляются с таблицами базы данных. После создания классов сущностей, их можно использовать в качестве источников данных об объекте точно так же как другие классы, которые имеют общие свойства

Для создания класса сущностей Customer и настройки с ним источника данных

  1. В Обозревателе серверов/Обозревателе баз данных найдите таблицу Customer в SQL Server версии примера базы данных Northwind. Дополнительные сведения см. в разделе Практическое руководство. Создание подключения к базе данных Northwind.

  2. Перетащите узел Customers из Обозревателя сервера/Обозревателя базы данных на область Сред. Объектно-реляционный конструктор.

    Создастся класс сущностей с именем Customer. Он имеет свойства, соответствующие столбцам в таблице Customers. Класс сущностей имеет имя Customer (не Customers), поскольку он представляет одного клиента из таблицы Customers.

    Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

    Такой режим переименования называется преобразованием во множественную форму. В Диалоговое окно "Параметры" (Visual Studio) его можно включать или отключать. Дополнительные сведения см. в разделе Как отключить и включить преобразование во множественную форму (реляционный конструктор объектов).

  3. В меню Build щелкните пункт Build UpdatingwithSProcsWalkthrough для создания проекта.

  4. В меню Данные выберите команду Показать источники данных.

  5. В окне Источники данных выберите Добавить новый источник данных.

  6. На странице Выбор типа источника данных выберите Объект и нажмите кнопку Далее.

  7. Разверните узел UpdatingwithSProcsWalkthrough и найдите и выберите класс Customer.

    Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

    Если класс Customer недоступен, отмените работу мастера, постройте проект и снова запустите мастер.

  8. Нажмите кнопку Готово для создания источника данных и добавления класса сущности Customer в окно Источники данных.

Создание представления DataGridView для отображения данных класса Customer на Windows Form

Создайте элементы управления, которые связаны с классами сущностей, путем перетаскивания пунктов источника данных LINQ to SQL из окна Data Sources на Windows Form.

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

  1. Откройте форму Form1 в режиме конструктора.

  2. Из окна Источники данных перетащите узел Customer на форму Form1.

    Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

    Чтобы вывести окно Источники данных, выберите в меню Данные команду Показать источники данных.

  3. Откройте форму Form1 в редакторе кода.

  4. Добавьте следующий код в форму, которая является глобальной по отношению к форме, находящейся за пределами любого конкретного метода, но внутри класса Form1:

    Private NorthwindDataContext1 As New NorthwindDataContext
    
    private NorthwindDataContext northwindDataContext1
        = new NorthwindDataContext();
    
  5. Создайте обработчик события для события Form_Load и добавьте в обработчик следующий код:

    CustomerBindingSource.DataSource = NorthwindDataContext1.Customers
    
    customerBindingSource.DataSource
        = northwindDataContext1.Customers;
    

Реализация кнопки Save Functionality (Сохранить функциональные возможности)

По умолчанию опция создания кнопки Сохранить не активизирована и реализовать сохранение функциональных возможностей невозможно. Итак, код для сохранения измененных данных в базе данных, когда создаются привязанные к данным элементы управления для источников данных об объекте, не будет автоматически добавляться. В этом разделе объясняется как включить опцию создания кнопки Сохранить и включить кнопку Сохранить функциональные возможности для объектов LINQ to SQL.

Для реализации кнопки Save Functionality (Сохранить функциональные возможности)

  1. Откройте форму Form1 в режиме конструктора.

  2. Выберите кнопку Сохранить на CustomerBindingNavigator (кнопка, на которой изображена дискета).

  3. В окне Properties задайте для свойства Enabled значение True.

  4. Дважды щелкните кнопку сохранить, чтобы создать обработчик события и переключиться в редактор кода.

  5. Добавьте в обработчик события для кнопки Сохранить следующий код:

    NorthwindDataContext1.SubmitChanges()
    
    northwindDataContext1.SubmitChanges();
    

Переопределение поведения по умолчанию для выполнения обновлений (Inserts, Updates и Deletes)

Для переопределения поведения по умолчанию при обновлении

  1. Откройте файл LINQ to SQL в Сред. Объектно-реляционный конструктор. (Дважды щелкните по файлу Northwind.dbml вin Обозревателе решений.)

  2. В Обозревателе сервера/Обозревателе базы данных разверните узел баз данных Northwind Сохраненные процедуры найдите сохраненные процедуры InsertCustomers, UpdateCustomers и DeleteCustomers.

  3. Перетащите все три сохраненные процедуры на Сред. Объектно-реляционный конструктор.

    Сохраненные процедуры добавляются в дерево методов как методы DataContext. Дополнительные сведения см. в разделе Методы DataContext (реляционный конструктор объектов).

  4. Выберите класс сущностей Customer в Сред. Объектно-реляционный конструктор.

  5. В окне Свойства выберите свойство Вставка.

  6. Нажмите кнопку с многоточием (...) рядом со словами Использовать среду выполнения, чтобы открыть диалоговое окно Настройка поведения.

  7. Выберите Customize.

  8. Выберите метод InsertCustomers в списке Customize.

  9. Нажмите кнопку Применить для сохранения изменений для выбранного класса и поведения.

    Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

    Можно продолжить настройку режима для каждого сочетания класса и режима при условии, что после каждого изменения нажимается кнопка Применить. Если вы изменяете класс или поведения до нажатия кнопки Применить, то появляется предупреждающее диалоговое окно, предлагающее применить выполненные изменения.

  10. Выберите Обновить в списке Поведение.

  11. Выберите Customize.

  12. Выберите метод UpdateCustomers в списке Customize.

    Проверьте список Аргументы метода и Свойства класса и укажите, что для некоторых столбцов в таблице имеется два списка Аргументы метода и два списка Свойства класса. Это облегчает возможность прослеживать изменения и создавать инструкции, которые проверяют нарушения параллелизма.

  13. Сопоставьте аргумент метода Original_CustomerID свойству класса CustomerID (Original).

    Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

    По умолчанию аргументы метода будут сопоставлены со свойствами класса, если их имена совпадают. Если имена свойств изменились и больше не совпадают в таблице и в классе сущностей, может понадобиться выбрать эквивалентное свойство класса для сопоставления, если реляционный конструктор объектов не может определить правильное сопоставление. Кроме того, если отсутствуют допустимые свойства класса для сопоставления с аргументами метода, можно установить Свойства класса в значение (Нет).

  14. Нажмите кнопку Применить для сохранения изменений для выбранного класса и поведения.

  15. Выберите Удалить в списке Поведение.

  16. Выберите Customize.

  17. Выберите метод DeleteCustomers в списке Customize.

  18. Сопоставьте аргумент метода Original_CustomerID свойству класса CustomerID (Original).

  19. Нажмите кнопку ОК.

Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

Это не повлияет на использование данного пошагового руководства, , однако следует заметить, что LINQ to SQL автоматически обрабатывает значения, создаваемые в базе данных, для столбцов идентификаторов (с автоматическим приращением), столбцов rowguidcol (идентификатор GUID, создаваемый базой данных) и столбцов timestamp в ходе операций вставки и обновления. Генерируемые базой данных значения в других типах столбцов будут неожиданно давать нулевое значение. Чтобы возвращать значения, создаваемые базой данных, следует вручную установить свойство IsDbGenerated в значение true, а свойство AutoSync — в одно из следующих значений: Always, OnInsert или OnUpdate.

Тестирование приложения

Снова запустите приложение, чтобы убедиться, что сохраненная процедура UpdateCustomers правильно обновляет запись клиента в базе данных.

Тестирование приложения

  1. Нажмите клавишу F5.

  2. Измените запись в таблице, чтобы проверить поведение Обновления.

  3. Добавьте новую запись, чтобы проверить поведение Вставки.

  4. Нажмите кнопку Сохранить, чтобы сохранить изменения в базе данных.

  5. Закройте форму.

  6. Нажмите клавишу F5 и убедитесь, что обновленная запись и недавно вставленная запись сохранились.

  7. Удалите новую запись, чтобы проверить поведение Удаления.

  8. Нажмите кнопку Сохранить, чтобы представить изменения и стереть удаленную запись из базы данных

  9. Закройте форму.

  10. Нажмите клавишу F5 и убедитесь, что удаленная запись была стерта из базы данных.

    Bb629289.alert_note(ru-ru,VS.90).gifПримечание.

    Если приложение использует SQL Server Express Edition, то в зависимости от значения свойства Копировать в выходной каталог файла базы данных изменения могут не отображаться, когда на шаге 10 нажимается клавиша F5. Дополнительные сведения см. в разделе Практическое руководство. Управление локальными файлами данных в проекте.

Следующие действия

В зависимости от требований приложения есть несколько шагов, которые возможно потребуется выполнить после создания классов сущностей LINQ to SQL. Можно внести в приложение следующие усовершенствования:

См. также

Задачи

Как назначить хранимые процедуры для выполнения обновлений, вставок и удалений (реляционный конструктор объектов)

Основные понятия

Запросы LINQ to SQL

Методы DataContext (реляционный конструктор объектов)

Новые возможности данных

Другие ресурсы

Реляционный конструктор объектов

LINQ to SQL