Инструменты LINQ to SQL в Visual Studio

LINQ to SQL — это первая технология объектно-реляционного сопоставления, выпущенная корпорацией Майкрософт. Она хорошо работает в основных сценариях и по мере возможности будет и дальше поддерживаться в Visual Studio, но активная разработка этой технологии больше не ведется. Используйте LINQ to SQL при обслуживании приложения более ранних версий, в котором она уже применяется, или в простых приложениях, которые используют SQL Server и не требуют сопоставления нескольких таблиц. Как правило, новые приложения, если им нужен уровень объектно-реляционного сопоставления, должны использовать Entity Framework.

Установка средств LINQ to SQL

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

Чтобы установить средства LINQ to SQL, запустите установщик Visual Studio, выберите Изменить, затем перейдите на вкладку Отдельные компоненты и выберите Инструменты LINQ to SQL в категории Средства для работы с кодом.

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

Область реляционного конструктора объектов делится на две части: область сущностей (слева) и область методов (справа). Область сущностей является основной областью конструктора, отображающей классы сущностей, ассоциации и иерархии наследования. Область методов — это область конструктора, отображающая методы DataContext, которые сопоставлены хранимым процедурам и функциям.

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

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

Чтобы добавить в проект модель сущности LINQ to SQL, выберите Проект>Добавить новый элемент и найдите Классы LINQ to SQL в списке элементов проекта:

Классы LINQ-SQL

Visual Studio создает .dbml файл и добавляет его в решение. Он представляет собой XML-файл сопоставления и связанные с ним файлы кода.

Классы LINQ to SQL в обозреватель решений

При выборе .dbml файла Visual Studio отображает область конструктора O/R, которая позволяет визуально создать модель. На следующем рисунке показан конструктор после перетаскивания таблиц Northwind Customers и Orders из обозреватель сервера. Обратите внимание на связь между этими таблицами.

Конструктор LINQ to SQL

Внимание

Реляционный конструктор объектов представляет собой простой объектно-реляционный модуль сопоставления, поскольку он поддерживает только сопоставляющие отношения 1:1. Другими словами, класс объекта может иметь сопоставляющее отношение только 1:1 с таблицей базы данных или представлением. Сложные сопоставления, например сопоставление класса сущностей с соединяемой таблицей, не поддерживаются. Для сложных сопоставлений используйте Entity Framework. Кроме того, конструктор является односторонним генератором объектного кода. Это означает, что только изменения, которые вы осуществляете на области конструктора, отражаются в файле кода. Изменения, вносимые в файл кода вручную, не отражаются в реляционном конструкторе объектов. Любые изменения, которые вы вручную осуществляете в файле кода принимаются, когда конструктор сохраняется и генерируется код. Сведения о том, как добавить пользовательский код и распространить классы, создаваемые реляционный конструктор объектов, см. в разделе как: Расширение кода, созданного реляционным конструктором объектов.

Создание и настройка DataContext

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

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

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

Создание методов DataContext, вызывающих сохраненные процедуры и функции

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

Примечание.

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

Настройка DataContext для использования сохраненных процедур сохранения данных между классами сущностей и базой данных

Как утверждалось ранее, можно создавать методы DataContext, которые вызывают сохраненные процедуры и функции. Кроме того, можно назначать сохраненные процедуры, которые могут использоваться для поведения среды выполнения LINQ to SQL по умолчанию, включая вставки, обновления и удаления. Дополнительные сведения см. в статье "Практическое руководство. Назначение хранимых процедур для выполнения обновлений, вставок и удалений (конструктор операций ввода-вывода)".

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

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

Запросы LINQ to SQL

Классы сущностей, созданные конструктором O/R, предназначены для использования с языковым интегрированным запросом (LINQ). Дополнительные сведения см. в разделе "Практическое руководство. Запрос сведений".

Выделение сгенерированного DataContext и кода класса сущностей в отдельный пространства имен Namespaces

Реляционный конструктор объектов предоставляет свойства Контекстное пространство имен и Пространство имен сущностей в DataContext. Эти свойства определяют, какое пространство имен DataContext и кода классов сущностей генерируется в нем. По умолчанию эти свойства пустые и DataContext классы сущностей генерируются в пространстве имен приложения. Чтобы сгенерировать код в пространство имен, отличное от пространства имен приложения, введите значение в свойства Контекстное пространство имен и (или) Пространство имен сущностей.

Справочное содержимое

См. также