Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Классы DataSet и связанные классы являются устаревшими технологиями .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. Среда выполнения создает инструкции по умолчанию и Insert инструкции на основе схемы UpdateDeleteтаблицы (определения столбцов и сведения о первичном ключе). Если вы не хотите использовать поведение по умолчанию, можно настроить поведение обновления и назначить определенные хранимые процедуры для выполнения необходимых вставок, обновлений и удалений, необходимых для работы с данными в базе данных. Это можно сделать также, если поведение не создается по умолчанию, например, если классы сущностей сопоставляются с представлениями. Кроме того, можно переопределить поведение обновления по умолчанию, если для базы данных требуется доступ к таблицам с помощью хранимых процедур. Дополнительные сведения см. в разделе "Настройка операций с помощью хранимых процедур".
Замечание
В этом пошаговом руководстве требуется доступность хранимых процедур 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.
Если у вас нет SQL Server Express LocalDB, установите его на странице скачивания SQL Server Express или с помощью Установщика Visual Studio. В установщике Visual Studioможно установить SQL Server Express LocalDB в рамках рабочей нагрузки хранилища данных и обработки или как отдельный компонент.
Установите пример базы данных Northwind, выполнив следующие действия.
В Visual Studio откройте окно обозревателя объектов SQL Server. (Обозреватель объектов SQL Server устанавливается в составе рабочей нагрузки хранения данных и обработки в установщике Visual Studio.) Разверните узел SQL Server. Щелкните правой кнопкой мыши экземпляр LocalDB и выберите Новый запрос.
Откроется окно редактора запросов.
Скопируйте скрипт Northwind Transact-SQL в буфер обмена. Этот скрипт T-SQL создает базу данных Northwind с нуля и заполняет ее данными.
Вставьте скрипт T-SQL в редактор запросов, а затем нажмите кнопку Выполнить.
Через некоторое время запрос завершает работу и создается база данных Northwind.
Создание приложения и добавление классов LINQ в SQL
Так как вы работаете с классами LINQ to SQL и отображаете данные в Windows Form, создайте новое приложение Windows Forms и добавьте файл классов LINQ to SQL.
Замечание
Инструкции в этой статье иллюстрируют последнюю версию интерактивного интерфейса разработки (IDE), доступную в Visual Studio. На компьютере могут отображаться различные имена или расположения для некоторых элементов пользовательского интерфейса. Вы можете использовать другую версию Visual Studio или разные параметры среды. Дополнительные сведения см. в разделе Персонализация интегрированной среды разработки.
Создание проекта приложения Windows Forms, содержащего классы LINQ to SQL
В Visual Studio в меню "Файл " выберите "Создать>проект".
Разверните Visual C# или Visual Basic в левой области, а затем выберите "Рабочий стол Windows".
В средней области выберите тип проекта приложения Windows Forms .
Присвойте проекту имя UpdatingWithSProcsWalkthrough и выберите OK.
Проект UpdatingWithSProcsWalkthrough создается и добавляется в Обозреватель решений.
В меню проекта щелкните Добавить Новый Элемент.
Щелкните шаблон LINQ to SQL классов и введите Northwind.dbml в поле Имя.
Нажмите кнопку Добавить.
В проект добавляется пустой файл классов LINQ to SQL (Northwind.dbml), а конструктор O/R открывается.
Создайте класс сущности Customer и источник данных объекта.
Создайте классы LINQ to SQL, сопоставленные с таблицами базы данных, перетаскивая таблицы из обозревателя серверов или обозревателябаз данных в конструктор O/R. Результатом является классы сущностей LINQ to SQL, которые сопоставляют таблицы в базе данных. После создания классов сущностей их можно использовать в качестве источников данных объекта так же, как и другие классы, имеющие общедоступные свойства.
Создание класса сущности Customer и настройка источника данных с ним
В обозревателе сервера или обозревателебаз данных найдите таблицу Customer в версии SQL Server примера базы данных Northwind.
Перетащите узел Клиенты из обозревателя серверов или обозревателя баз данных на поверхность конструктора O/R.
Создается класс сущности с именем Customer . Он имеет свойства, соответствующие столбцам в таблице Customers. Класс сущности называется "Customer" (а не "Customers"), так как он представляет одного клиента из таблицы "Customers".
Замечание
Это поведение переименования называется плюрализацией. Его можно включить или отключить в диалоговом окне "Параметры". Дополнительные сведения см. в разделе "Практическое руководство. Включение и отключение плюрализации( конструктор операций ввода-вывода)".
В меню "Сборка" выберите "Сборка UpdatingwithSProcsWalkthrough", чтобы создать проект.
Чтобы открыть окно "Источники данных" , в меню "Данные " щелкните "Показать источники данных".
В окне Источники данных щелкните Добавить новый источник данных.
Нажмите кнопку "Объект" на странице "Выбор типа источника данных " и нажмите кнопку "Далее".
Разверните узел UpdatingwithSProcsWalkthrough и найдите и выберите класс Customer .
Замечание
Если класс Customer недоступен, отмените работу мастера, создайте проект и снова запустите мастер.
Нажмите кнопку "Готово ", чтобы создать источник данных и добавить класс сущности Customer в окно "Источники данных ".
Создание DataGridView для отображения данных клиента в Форме Windows
Создайте элементы управления, привязанные к классам сущностей, перетащив элементы источника данных LINQ в SQL из окна "Источники данных " в Windows Form.
Добавление элементов управления, привязанных к классам сущностей
Откройте Form1 в представлении конструктора.
В окне источников данных перетащите узел Customer в Form1.
Замечание
Чтобы отобразить окно "Источники данных" , щелкните "Показать источники данных " в меню "Данные ".
Откройте форму 1 в редакторе кода.
Добавьте следующий код в форму, чтобы он был доступен глобально по всей форме, за пределами какого-либо конкретного метода, но внутри класса:
Создайте обработчик событий для
Form_Loadсобытия и добавьте следующий код в обработчик:
Реализация функций сохранения
По умолчанию кнопка сохранения не включена и функция сохранения не реализована. Кроме того, код не добавляется автоматически для сохранения измененных данных в базу данных при создании элементов управления с привязкой к данным для источников данных объекта. В этом разделе объясняется, как включить кнопку сохранения и реализовать функции сохранения для объектов LINQ to SQL.
Реализация функций сохранения
Откройте Form1 в представлении конструктора.
Нажмите кнопку сохранения на элементе CustomerBindingNavigator (кнопка со значком дискеты).
В окне "Свойства" задайте для свойства Enabledзначение True.
Дважды щелкните кнопку сохранения, чтобы создать обработчик событий и переключиться в редактор кода.
Добавьте следующий код в обработчик событий кнопки сохранения:
Переопределите поведение по умолчанию для выполнения обновлений (вставки, обновления и удаления)
Чтобы переопределить поведение обновления по умолчанию
Откройте файл LINQ to SQL в конструкторе O/R. (Дважды щелкните файл Northwind.dbml в обозревателе решений.)
В обозревателе серверов или обозревателе баз данных разверните узел хранимых процедур базы данных Northwind и найдите процедуры InsertCustomers, UpdateCustomers и DeleteCustomers.
Перетащите все три хранимые процедуры в конструктор O/R.
Хранимые процедуры добавляются в область методов в качестве DataContext методов. Дополнительные сведения см. в методах DataContext (конструктор O/R) .
Выберите класс сущности Customer в конструкторе O/R.
В окне "Свойства" выберите свойство Insert .
Щелкните многоточие (...) рядом с параметром "Использовать среду выполнения ", чтобы открыть диалоговое окно "Настройка поведения ".
Выберите Настроить.
Выберите метод InsertCustomers в списке "Настройка ".
Нажмите кнопку "Применить" , чтобы сохранить конфигурацию для выбранного класса и поведения.
Замечание
Вы можете продолжать настраивать поведение для каждого сочетания классов и поведения до тех пор, пока вы нажимаете кнопку "Применить " после каждого изменения. Если вы измените класс или поведение перед нажатием кнопки "Применить", появится диалоговое окно предупреждения, предоставляющее возможность применить любые изменения.
Выберите "Обновить" в списке "Поведение ".
Выберите Настроить.
Выберите метод UpdateCustomers в списке "Настройка ".
Проверьте список аргументов метода и свойств класса и обратите внимание, что для некоторых столбцов в таблице есть два аргумента метода и два свойства класса. Это упрощает отслеживание изменений и формирование инструкций, которые проверяют нарушения параллелизма.
Сопоставить аргумент метода Original_CustomerID с свойством класса CustomerID (Original ).
Замечание
По умолчанию аргументы метода сопоставляют свойства класса при сопоставлении имен. Если имена свойств изменяются и больше не совпадают между таблицей и классом сущностей, может потребоваться выбрать эквивалентное свойство класса для сопоставления, если конструктор O/R не может определить правильное сопоставление. Кроме того, если аргументы метода не имеют допустимых свойств класса для сопоставления, можно задать для параметра "Свойства класса" значение (None).
Нажмите кнопку "Применить" , чтобы сохранить конфигурацию для выбранного класса и поведения.
Выберите "Удалить " в списке "Поведение ".
Выберите Настроить.
Выберите метод DeleteCustomers в списке "Настройка ".
Сопоставить аргумент метода Original_CustomerID с свойством класса CustomerID (Original ).
Нажмите кнопку ОК.
Замечание
Хотя это не является проблемой для этого конкретного пошагового руководства, следует отметить, что LINQ to SQL автоматически обрабатывает значения, создаваемые базой данных, для идентификаторов (автоинкремент), rowguidcol (глобально уникальный идентификатор (GUID), создаваемый базой данных) и столбцов метки времени во время операций вставки и обновления. Значения, созданные базой данных в других типах столбцов, неожиданно приводят к значению NULL. Чтобы вернуть значения, созданные базой данных, необходимо вручную установить IsDbGenerated в true и задать для AutoSync одно из следующих значений: AutoSync.Always, AutoSync.OnInsert или AutoSync.OnUpdate.
Тестирование приложения
Запустите приложение еще раз, чтобы убедиться, что хранимая процедура UpdateCustomers правильно обновляет запись клиента в базе данных.
Нажмите клавишу F5.
Измените запись в сетке, чтобы проверить поведение обновления.
Добавьте новую запись для проверки поведения вставки.
Нажмите кнопку "Сохранить", чтобы сохранить изменения обратно в базу данных.
Закройте форму.
Нажмите клавишу F5 и убедитесь, что обновленная запись и только что вставленная запись сохранены.
Удалите новую запись, созданную на шаге 3, чтобы проверить поведение удаления.
Нажмите кнопку сохранения, чтобы отправить изменения и удалить удаленную запись из базы данных.
Закройте форму.
Нажмите клавишу F5 и убедитесь, что удаленная запись была удалена из базы данных.
Замечание
Если приложение использует SQL Server Express Edition в зависимости от значения свойства Copy to Output Directory файла базы данных, изменения могут не отображаться при нажатии клавиши F5 на шаге 10.
Дальнейшие шаги
В зависимости от требований приложения может потребоваться выполнить несколько шагов после создания классов сущностей LINQ to SQL. Некоторые улучшения, которые можно сделать в этом приложении, включают следующие:
Реализуйте проверку параллелизма во время обновлений. Для получения информации см. в разделе «Оптимистическая согласованность: обзор».
Добавьте запросы LINQ для фильтрации данных. Дополнительные сведения см. в разделе "Общие сведения о запросах LINQ" (C#).