Поделиться через


Пошаговое руководство. Простая модель объектов и простой запрос (C#)

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

Это пошаговое руководство ориентировано на код для отображения концепций LINQ to SQL. Как правило, вы будете использовать реляционный конструктор объектов для создания объектной модели.

Примечание.

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

Это пошаговое руководство было написано с использованием параметров разработки Visual C#.

Необходимые компоненты

  • Для хранения файлов используется выделенная папка ("c:\linqtest5"). Прежде чем приступить к выполнению задач, создайте такую папку.

  • В данном пошаговом руководстве требуется доступ к учебной базе данных Northwind. Если база данных не установлена на компьютере разработчика, загрузите ее с веб-узла Центра загрузки Майкрософт. Инструкции см. в разделе "Скачивание примеров баз данных". После загрузки базы данных скопируйте файл в папку c:\linqtest5.

Обзор

Данное пошаговое руководство состоит из шести основных задач.

  • Создание решения 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. В поле "Имя" введите LinqConsoleApp.

  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;
    

Сопоставление класса с таблицей базы данных

На этом этапе создается класс, который сопоставляется с таблицей базы данных. Такой класс называется классом сущности. Обратите внимание, что сопоставление осуществляется простым добавлением атрибута TableAttribute. Свойство Name задает имя таблицы в базе данных.

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

  • Введите или вставьте следующий код в Program.cs непосредственно перед объявлением класса Program.

    [Table(Name = "Customers")]
    public class Customer
    {
    }
    

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

На этом этапе выполняется несколько задач.

  • Используется атрибут ColumnAttribute для назначения классу сущностей свойств CustomerID и City, представляющих столбцы в таблице базы данных.

  • Назначается свойство CustomerID, представляющее столбец первичного ключа в базе данных.

  • Назначаются поля _CustomerID и _City для закрытого хранения. LINQ to SQL может хранить и извлекать значения напрямую, а не использовать общедоступные методы доступа, которые могут включать бизнес-логику.

Представление характеристик двух столбцов базы данных

  • Для класса Customer введите или вставьте следующий код в Program.cs в фигурных скобках.

    private string _CustomerID;
    [Column(IsPrimaryKey=true, Storage="_CustomerID")]
    public string CustomerID
    {
        get
        {
            return this._CustomerID;
        }
        set
        {
            this._CustomerID = value;
        }
    }
    
    private string _City;
    [Column(Storage="_City")]
    public string City
    {
        get
        {
            return this._City;
        }
        set
        {
            this._City=value;
        }
    }
    

Указание подключения к базе данных Northwind

На этом этапе для установки подключения между основанными на коде структурами данных и самой базой данных используется объект DataContext. Основным каналом, через который извлекаются объекты из базы данных и отправляются изменения, является класс DataContext.

Также объявляется объект Table<Customer>, который действует как логическая типизированная таблица для запросов к таблице Customers в базе данных. Эти запросы создаются и выполняются в последующих действиях.

Указание подключения к базе данных

  • Введите или вставьте следующий код в метод Main.

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

    // Use a connection string.
    DataContext db = new DataContext
        (@"c:\linqtest5\northwnd.mdf");
    
    // Get a typed table to run queries.
    Table<Customer> Customers = db.GetTable<Customer>();
    

Создание простого запроса

На этом этапе создается запрос для поиска клиентов из таблицы Customers базы данных, находящихся в Лондоне. Код запроса, создаваемый на этом шаге, только описывает запрос. но не выполняет его. Этот подход называется отложенным выполнением. Дополнительные сведения см. в разделе Введение в запросы LINQ (C#).

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

Создание простого запроса

  • Введите или вставьте следующий код в метод Main после объявления Table<Customer>.

    // Attach the log to show generated SQL.
    db.Log = Console.Out;
    
    // Query for customers in London.
    IQueryable<Customer> custQuery =
        from cust in Customers
        where cust.City == "London"
        select cust;
    

Выполнение запроса

На этом шаге производится фактическое выполнение запроса. Выражения запроса, созданные на предыдущем этапе, не оцениваются до тех пор, пока не понадобятся результаты. После начала итерации foreach выполняется команда SQL для базы данных и материализуются объекты.

Выполнение запроса

  1. Введите или вставьте следующий код в конце метода Main (после описания запроса).

    foreach (Customer cust in custQuery)
    {
        Console.WriteLine("ID={0}, City={1}", cust.CustomerID,
            cust.City);
    }
    
    // Prevent console window from closing.
    Console.ReadLine();
    
  2. Нажмите клавишу F5, чтобы начать отладку приложения.

    Примечание.

    Если приложение создает ошибку во время выполнения, ознакомьтесь с разделом "Устранение неполадок" Обучение по пошаговому руководству.

    В окне консоли отображаются следующие результаты запроса.

    ID=AROUT, City=London

    ID=BSBEV, City=London

    ID=CONSH, City=London

    ID=EASTC, City=London

    ID=NORTS, City=London

    ID=SEVES, City=London

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

Next Steps

Пошаговое руководство. Выполнение запросов между связями (C#) продолжается, где заканчивается это пошаговое руководство. В пошаговом руководстве по связям запросов по связям показано, как LINQ to SQL может выполнять запросы между таблицами, как и соединения в реляционной базе данных.

Если требуется выполнить пошаговое руководство "Выполнение запросов в связях", необходимо сохранить решение, созданное в процессе только что завершенного пошагового руководства. Это условие является обязательным.

См. также