Пошаговое руководство. Создание классов LINQ to SQL (реляционный конструктор объектов)

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

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

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

  • Добавление файла LINQ to SQL в проект.

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

  • Создайте источник данных об объекте, который ссылается на классы сущностей.

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

  • Добавьте код для загрузки и сохранения данных между классами сущностей и базой данных.

  • Постройте простой запрос LINQ и отобразите результаты на форме.

  • Добавьте сохраненные процедуры в Реляционный конструктор объектов.

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

Обязательные компоненты

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

Создание приложения Windows

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

Примечание

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

Для создания нового проекта приложения Windows

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

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

    Примечание

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

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

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

Добавление файла LINQ to SQL Classes в проект (Открытие Реляционного конструктора объектов)

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

Для добавления файла в проект

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

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

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

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

После добавления нового файла LINQ to SQL в проект открывается пустая область конструктора, отображающая две отдельных области. Область слева находится это область сущностей, в которой отображаются и конфигурируются классы сущностей. Область справа это область методов, которая отображает методы DataContext, добавленные в конструктор. Если область методов не видна, щелкните по пустой строке области сущностей правой кнопкой мыши и выберите Показать область методов. Полностью пустая область сущностей представляет готовую к конфигурированию DataContext. Имя DataContext соответствует имени, которое было дано DBML-файлу. Для этого пошагового руководства, поскольку файлу LINQ to SQL было дано имя Northwind.dbml, DataContext назван NorthwindDataContext. Можно проверить это, щелкнув по пустой области в конструкторе и проверив окно Свойства.

Примечание

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

Создание классов сущностей Customer и Order

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

Для добавления в реляционный конструктор объектов класс сущностей Customer

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

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

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

    Примечание

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

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

    Создастся класс сущности с именем Order вместе с ассоциацией (отношением) Customer_Order с классом сущностей Customer. Он имеет свойства, соответствующие столбцам в таблице Orders.

    Примечание

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

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

Классы сущностей, как и другие классы, которые имеют общие свойства, можно использовать в качестве источников данных об объекте. Их можно добавить в окно Источники данных и переносить на формы для создания связанных с данными элементов управления (элементов управления, которые связаны со значениями в общих свойствах объекта). Добавьте классы сущностей в окно Источники данных, запустив мастера Мастер конфигурирования источника данных и щелкнув по Объекту для источника данных в мастере.

Для добавления Customer в качестве источника данных в окне Источники данных

  1. В меню Build щелкните пункт Построить Build ORDesignerWalkthrough для создания проекта.

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

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

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

  5. Разверните узел ORDesignerWalkthrough (узел с именем проекта) и найдите и выберите класс Customer.

    Примечание

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

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

Создание связанных с данными элементов управления для отображения данных на Windows Form

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

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

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

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

    Примечание

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

  3. Перетащите узел Orders из окна Источники данных на форму Form1. Поместите его в папке CustomerDataGridView.

  4. Откройте форму Form1 в представлении кода.

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

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

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

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

Запустите приложение. В этой точке форма содержит один DataGridView, отображающий данный из таблицы Customers второй DataGridView, отображающий данные из выбранных заказов клиента.

Примечание

Обратите внимание, что кнопка «Сохранить» недоступна.(В следующем разделе будет показано, как реализовать эти функции сохранения.)

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

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

  2. Убедитесь, что данные появились в таблицах.

  3. Выберите клиента.

  4. Убедитесь, что отображаемые заказы относятся к выбранному клиенту.

  5. Закройте форму. (В меню Отладка щелкните по пункту меню Прекратить отладку.)

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

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

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

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

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

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

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

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

    Try
        NorthwindDataContext1.SubmitChanges()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    
    try
    {
        northwindDataContext1.SubmitChanges();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    

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

Запустите приложение. Кнопка «Сохранить» должна быть включена, и способность сохранять данные доступна.

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

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

  2. Измените некоторые данные в любой таблице. (Переместитесь от редактируемой строки в таблице, чтобы осуществить незавершенные изменения.)

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

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

  5. Нажмите клавишу F5 и убедитесь, что изменения были сохранены (или найдите таблицу в базе данных, чтобы убедиться, что изменения были сохранены).

Привязка к запросам LINQ

В дополнение к привязке элемента CustomerBindingSource к DataContext можно также привязать напрямую к запросам LINQ. Дополнительные сведения о том, как создавать запросы LINQ, см. в разделе Введение в запросы LINQ (C#).

Добавление в форму кнопки и текстового поля

Чтобы изучить, как привязать элементы управления к запросам LINQ, добавьте элементы управления в форму, которая позволяет вводить параметры запроса и выполнять запрос.

Для добавления элементов управления в форму

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

  2. Добавьте текстовое поле TextBox в форму и задайте ее свойство Имя в CityTextBox.

  3. Добавьте элемент управления Кнопка в форму и задайте следующие свойства:

    • Имя = RunQueryButton

    • Текст = Run Query

Привязка данных к запросу LINQ

Добавьте код, чтобы запустить запрос LINQ. Запрос использует значение, введенное в поле CityTextBox, как параметр запроса.

Для привязки запроса LINQ

  • Дважды щелкните RunQueryButton и добавьте следующий код в обработчик событийRunQueryButton_click:

    Dim CustomersQuery = From customers in NorthwindDataContext1.Customers _
        Where customers.City = CityTextBox.Text _
        Select customers
    
    CustomerBindingSource.DataSource = CustomersQuery
    
    var CustomersQuery = from customers in northwindDataContext1.Customers
                          where customers.City == CityTextBox.Text
                          select customers;
    customerBindingSource.DataSource = CustomersQuery;
    

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

Запустите приложение. Теперь можно сделать запрос для клиентов в определенном городе.

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

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

  2. В текстовом поле введите London.

  3. Нажмите кнопку Выполнить запрос.

  4. Убедитесь, что отображаются только пользователи со значением London в их свойстве City.

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

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

Примечание

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

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

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

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

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

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

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

  5. В окне Свойства выберите команду для переопределения. (Вставить, Обновить или Удалить). Для этого примера выберите свойство Обновить.

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

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

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

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

  10. Сопоставьте аргументы исходного метода (Original_ArgumentName) исходным свойствам (PropertyName (исходное)). Для этого пошагового руководства, необходимо сопоставить аргумент Original_CustomerID свойству CustomerID (Original).

    Примечание

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

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

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

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

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

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

  2. Найдите столбец ContactName в таблице для ALFKI.

  3. Измените имя файла Maria Anders именем Anders.

  4. Перейдите со строки, чтобы принять изменение.

  5. Щелкните кнопку Сохранить.

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

  7. Нажмите клавишу F5, чтобы снова запустить приложение и убедиться, что только Anders появляется в столбце ContactName для ALFKI.

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

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

См. также

Ссылки

Общее руководство программирования на LINQ

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

Общие сведения о реляционном конструкторе объектов

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

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

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

LINQ to SQL

LINQ to ADO.NET

LINQ Documentation Roadmap

Доступ к данным в Visual Studio