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

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

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

Примечание

Данное пошаговое руководство требует наличия хранимых процедур 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.

Примечание

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

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

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

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

    Примечание

    Реляционный конструктор объектов поддерживается в проектах 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.

    Примечание

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

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

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

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

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

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

    Примечание

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

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

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

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

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

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

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

    Примечание

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

  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 в Обозревателе решений.)

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

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

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

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

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

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

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

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

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

    Примечание

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

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

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

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

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

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

    Примечание

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

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

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

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

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

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

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

Примечание

Хотя это не повлияет на работу данного пошагового руководства, следует заметить, что 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 и убедитесь, что удаленная запись была стерта из базы данных.

    Примечание

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

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

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

См. также

Задачи

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

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

Запросы LINQ to SQL

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

Новые возможности разработки приложений для работы с данными

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

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

LINQ to SQL