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

Примечание.

Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Они особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.

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

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

Примечание.

Данное пошаговое руководство требует наличия хранимых процедур InsertCustomer, UpdateCustomer и DeleteCustomer в базе данных Northwind.

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

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

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

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

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

  • Создайте форму Windows Form, содержащую DataGridView объект, привязанный к классу Customer .

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

  • Создайте DataContext методы, добавив хранимые процедуры в конструктор O/R.

  • Настройте класс, чтобы использовать хранимые Customer процедуры для выполнения вставок, обновлений и удаления.

Необходимые компоненты

В этом пошаговом руководстве используется SQL Server Express LocalDB и пример базы данных Northwind.

  1. Если у вас нет SQL Server Express LocalDB, установите его на странице скачивания SQL Server Express или с помощью Установщика Visual Studio. В установщике Visual Studio можно установить SQL Server Express LocalDB как часть рабочей нагрузки хранилища данных и обработки или как отдельный компонент.

  2. Установите пример базы данных Northwind, выполнив следующие действия.

    1. В Visual Studio откройте окно обозреватель объектов SQL Server. (SQL Server обозреватель объектов устанавливает в составе рабочей нагрузки хранилища данных и обработки в Visual Studio Installer.) Разверните узел SQL Server. Щелкните правой кнопкой мыши экземпляр LocalDB и выберите новый запрос.

      Откроется окно редактора запросов.

    2. Скопируйте скрипт Northwind Transact-SQL в буфер обмена. Этот скрипт T-SQL создает базу данных Northwind с нуля и заполняет ее данными.

    3. Вставьте скрипт T-SQL в редактор запросов и нажмите кнопку "Выполнить ".

      Через некоторое время запрос завершает работу и создается база данных Northwind.

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

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

Примечание.

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в этой статье. Возможно, вы используете другой выпуск Visual Studio или разные параметры среды. Дополнительные сведения см. в разделе Персонализация среды IDE.

Создание проекта приложения Windows Forms, содержащего классы LINQ to SQL

  1. В Visual Studio в меню Файл выберите пункты Создать>Проект.

  2. Разверните Visual C# или Visual Basic в левой области, а затем выберите "Рабочий стол Windows".

  3. В средней области выберите тип проекта приложения Windows Forms.

  4. Присвойте проекту имя обновленияWithSProcsWalkthrough и нажмите кнопку "ОК".

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

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

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

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

    В проект добавляется пустой файл классов LINQ to SQL (Northwind.dbml), а конструктор O/R открывается.

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

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

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

  1. На сервере Обозреватель или базе данных Обозреватель найдите таблицу Customer в версии SQL Server примера базы данных Northwind.

  2. Перетащите узел "Клиенты" с сервера Обозреватель или базы данных Обозреватель в область конструктора операций ввода-вывода или R.

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

    Примечание.

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

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

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

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

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

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

    Примечание.

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

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

Создание DataGridView для отображения данных клиента в Форме Windows

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

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

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

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

    Примечание.

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

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

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

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

    customerBindingSource.DataSource
        = northwindDataContext1.Customers;
    

Реализация функций сохранения

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

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

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

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

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

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

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

    northwindDataContext1.SubmitChanges();
    

Переопределите поведение по умолчанию для выполнения обновлений (вставки, обновления и удаления)

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

  1. Откройте файл LINQ to SQL в конструкторе O/R. (Дважды щелкните по файлу Northwind.dbml в Обозревателе решений.)

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

  3. Перетащите все три хранимые процедуры в конструктор O/R.

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

  4. Выберите класс сущности Customer в конструкторе O/R.

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

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

  7. Выберите Настроить.

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

  9. Нажмите кнопку Применить, чтобы сохранить конфигурацию для выбранного класса и поведения.

    Примечание.

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

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

  11. Выберите Настроить.

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

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

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

    Примечание.

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

  14. Нажмите кнопку Применить, чтобы сохранить конфигурацию для выбранного класса и поведения.

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

  16. Выберите Настроить.

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

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

  19. Щелкните OK.

Примечание.

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

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

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

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

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

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

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

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

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

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

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

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

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

    Примечание.

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

Следующие шаги

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