Пошаговое руководство. Управление данными (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

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

  2. В области "Типы проектов" в диалоговом окне "Создать проект" щелкните Visual C#.

  3. В области Шаблоны щелкните Консольное приложение.

  4. В поле "Имя" введите LinqDataManipulationApp.

  5. В поле "Расположение" проверьте место хранения файлов проекта.

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

Добавление ссылок и директив LINQ

В этом пошаговом руководстве используются сборки, которые могут быть не установлены по умолчанию в проект. Если System.Data.Linq не входит в список ссылок проекта, добавьте ее, как описано в следующих действиях.

Добавление сборки System.Data.Linq

  1. В Обозреватель решений щелкните правой кнопкой мыши ссылки и нажмите кнопку "Добавить ссылку".

  2. В диалоговом окне "Добавить ссылку" нажмите кнопку .NET, щелкните сборку System.Data.Linq и нажмите кнопку "ОК".

    Сборка будет добавлена в проект.

  3. Добавьте следующие директивы в начало Program.cs.

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

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

При выполнении этих действий подразумевается, что для создания файла кода из учебной базы данных Northwind использовалось средство SQLMetal. Дополнительные сведения см. в разделе "Предварительные требования" ранее в этом руководстве.

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

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

  2. В диалоговом окне "Добавить существующий элемент" перейдите в папку c:\linqtest6\northwind.cs и нажмите кнопку "Добавить".

    Файл northwind.cs будет добавлен в проект.

Настройка подключения к базе данных

Сначала проверьте подключение к базе данных. Обратите особое внимание, что в имени базы данных - Northwnd - отсутствует буква "i". Если при выполнении следующих действий возникают ошибки, просмотрите файл northwind.cs, чтобы определить написание разделяемого класса Northwind.

Настройка и проверка подключения к базе данных

  1. Введите или вставьте следующий код в метод 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();
    
  2. Чтобы проверить приложение на этом этапе, нажмите клавишу F5.

    Откроется окно консоли.

    Приложение можно закрыть, нажав клавишу ВВОД в окне консоли или нажав кнопку "Остановить отладку" в меню отладки Visual Studio.

Создание новой сущности

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

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

Добавление нового объекта сущностей Customer

  1. Создайте новый 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);
    }
    
  2. Нажмите клавишу F5 для отладки решения.

  3. Нажмите клавишу ВВОД в окне консоли , чтобы остановить отладку и продолжить пошаговое руководство.

Обновление объекта

При выполнении следующих действий будет извлечен объект 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);
    

Отправка изменений в базу данных

Последнее действие, необходимое для создания, обновления и удаления объектов, заключается в фактической отправке изменений в базу данных. Без него изменения останутся на локальном уровне и не появятся в результатах запроса.

Отправка изменений в базу данных

  1. Вставьте следующий код перед Console.ReadLine.

    db.SubmitChanges();
    
  2. Вставьте следующий код (после 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);
    }
    
  3. Нажмите клавишу F5 для отладки решения.

  4. Нажмите клавишу ВВОД в окне консоли , чтобы закрыть приложение.

Примечание.

После добавления нового клиента путем отправки изменений это решение нельзя повторно выполнить в исходном виде. Для повторного выполнения решения измените имя клиента и значение идентификатора добавляемого клиента.

См. также