Пошаговое руководство. Управление данными (C#)
В этом пошаговом руководстве представлен базовый комплексный сценарий LINQ to SQL для добавления, изменения и удаления данных в базе данных. Для добавления клиента, изменения его имени и удаления заказа следует использовать копию учебной базы данных Northwind.
Примечание.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Это пошаговое руководство было написано с использованием параметров разработки Visual C#.
Необходимые компоненты
Необходимо выполнить следующие требования.
Для хранения файлов используется выделенная папка ("c:\linqtest6"). Прежде чем приступить к выполнению задач, создайте такую папку.
Наличие учебной базы данных Northwind.
Если база данных не установлена на компьютере разработчика, загрузите ее с веб-узла Центра загрузки Майкрософт. Инструкции см. в разделе "Скачивание примеров баз данных". После загрузки базы данных скопируйте файл northwnd.mdf в папку c:\linqtest6.
Наличие файла кода C#, созданного из базы данных Northwind.
Этот файл можно создать с помощью реляционный конструктор объектов или средства SQLMetal. Данное пошаговое руководство было написано с использованием средства SQLMetal со следующей командной строкой:
sqlmetal /code:"c:\linqtest6\northwind.cs" /language:csharp "C:\linqtest6\northwnd.mdf" /pluralize
Дополнительные сведения см. в разделе SQLMetal.exe (средство создания кода).
Обзор
Данное пошаговое руководство состоит из шести основных задач.
Создание решения LINQ to SQL в Visual Studio.
Добавление файла кода базы данных в проект.
Создание нового объекта клиента.
Изменение контактного имени клиента.
Удаление заказа.
Отправка внесенных изменений в базу данных Northwind.
Создание решения LINQ to SQL
В этой первой задаче создается решение Visual Studio, содержащее необходимые ссылки на сборку и запуск проекта LINQ to SQL.
Создание решения LINQ to SQL
В меню "Файл Visual Studio" наведите указатель мыши на "Создать" и выберите пункт "Проект".
В области "Типы проектов" в диалоговом окне "Создать проект" щелкните Visual C#.
В области Шаблоны щелкните Консольное приложение.
В поле "Имя" введите LinqDataManipulationApp.
В поле "Расположение" проверьте место хранения файлов проекта.
Щелкните OK.
Добавление ссылок и директив LINQ
В этом пошаговом руководстве используются сборки, которые могут быть не установлены по умолчанию в проект. Если System.Data.Linq не входит в список ссылок проекта, добавьте ее, как описано в следующих действиях.
Добавление сборки System.Data.Linq
В Обозреватель решений щелкните правой кнопкой мыши ссылки и нажмите кнопку "Добавить ссылку".
В диалоговом окне "Добавить ссылку" нажмите кнопку .NET, щелкните сборку System.Data.Linq и нажмите кнопку "ОК".
Сборка будет добавлена в проект.
Добавьте следующие директивы в начало Program.cs.
using System.Data.Linq; using System.Data.Linq.Mapping;
Добавление файла кода Northwind в проект
При выполнении этих действий подразумевается, что для создания файла кода из учебной базы данных Northwind использовалось средство SQLMetal. Дополнительные сведения см. в разделе "Предварительные требования" ранее в этом руководстве.
Добавление файла кода northwind в проект
В меню Проект выберите пункт Добавить существующий элемент.
В диалоговом окне "Добавить существующий элемент" перейдите в папку c:\linqtest6\northwind.cs и нажмите кнопку "Добавить".
Файл northwind.cs будет добавлен в проект.
Настройка подключения к базе данных
Сначала проверьте подключение к базе данных. Обратите особое внимание, что в имени базы данных - Northwnd - отсутствует буква "i". Если при выполнении следующих действий возникают ошибки, просмотрите файл northwind.cs, чтобы определить написание разделяемого класса Northwind.
Настройка и проверка подключения к базе данных
Введите или вставьте следующий код в метод
Main
в классе Program.// Use the following connection string. Northwnd db = new Northwnd(@"c:\linqtest6\northwnd.mdf"); // Keep the console window open after activity stops. Console.ReadLine();
Чтобы проверить приложение на этом этапе, нажмите клавишу F5.
Откроется окно консоли.
Приложение можно закрыть, нажав клавишу ВВОД в окне консоли или нажав кнопку "Остановить отладку" в меню отладки Visual Studio.
Создание новой сущности
Создание новой сущности не представляет особых проблем. Для создания объектов (например, Customer
) можно использовать ключевое слово new
.
В этом и следующих разделах выполняются изменения только локального кэша. Изменения не будут отправлены в базу данных до тех пор, пока ближе к концу данного руководства не будет вызван SubmitChanges.
Добавление нового объекта сущностей Customer
Создайте новый
Customer
, добавив передConsole.ReadLine();
в методеMain
следующий код.// Create the new Customer object. Customer newCust = new Customer(); newCust.CompanyName = "AdventureWorks Cafe"; newCust.CustomerID = "ADVCA"; // Add the customer to the Customers table. db.Customers.InsertOnSubmit(newCust); Console.WriteLine("\nCustomers matching CA before insert"); foreach (var c in db.Customers.Where(cust => cust.CustomerID.Contains("CA"))) { Console.WriteLine("{0}, {1}, {2}", c.CustomerID, c.CompanyName, c.Orders.Count); }
Нажмите клавишу F5 для отладки решения.
Нажмите клавишу ВВОД в окне консоли , чтобы остановить отладку и продолжить пошаговое руководство.
Обновление объекта
При выполнении следующих действий будет извлечен объект Customer
и изменено одно из его свойств.
Изменение имени клиента
Добавьте следующий код перед
Console.ReadLine();
:// Query for specific customer. // First() returns one object rather than a collection. var existingCust = (from c in db.Customers where c.CustomerID == "ALFKI" select c) .First(); // Change the contact name of the customer. existingCust.ContactName = "New Contact";
Удаление объекта
Используя тот же самый объект клиента, можно удалить первый заказ.
В следующем коде показано, как разорвать связь между строками и удалить строку из базы данных. Чтобы удаление объектов, добавьте следующий код перед Console.ReadLine
.
Удаление строки
Добавьте следующий код перед
Console.ReadLine();
.// Access the first element in the Orders collection. Order ord0 = existingCust.Orders[0]; // Access the first element in the OrderDetails collection. OrderDetail detail0 = ord0.OrderDetails[0]; // Display the order to be deleted. Console.WriteLine ("The Order Detail to be deleted is: OrderID = {0}, ProductID = {1}", detail0.OrderID, detail0.ProductID); // Mark the Order Detail row for deletion from the database. db.OrderDetails.DeleteOnSubmit(detail0);
Отправка изменений в базу данных
Последнее действие, необходимое для создания, обновления и удаления объектов, заключается в фактической отправке изменений в базу данных. Без него изменения останутся на локальном уровне и не появятся в результатах запроса.
Отправка изменений в базу данных
Вставьте следующий код перед
Console.ReadLine
.db.SubmitChanges();
Вставьте следующий код (после
SubmitChanges
), чтобы показать результаты до и после отправки изменений.Console.WriteLine("\nCustomers matching CA after update"); foreach (var c in db.Customers.Where(cust => cust.CustomerID.Contains("CA"))) { Console.WriteLine("{0}, {1}, {2}", c.CustomerID, c.CompanyName, c.Orders.Count); }
Нажмите клавишу F5 для отладки решения.
Нажмите клавишу ВВОД в окне консоли , чтобы закрыть приложение.
Примечание.
После добавления нового клиента путем отправки изменений это решение нельзя повторно выполнить в исходном виде. Для повторного выполнения решения измените имя клиента и значение идентификатора добавляемого клиента.