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


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

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

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

Замечание

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

Это пошаговое руководство было написано с помощью параметров разработки 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. Нажмите кнопку ОК.

Добавление ссылок и директив 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 может хранить и извлекать значения напрямую, а не использовать общедоступные методы доступа, которые могут включать бизнес-логику.

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

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

    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>();
    

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

На этом шаге вы создадите запрос, чтобы найти клиентов в таблице "Клиенты базы данных" в Лондоне. Код запроса на этом шаге просто описывает запрос. Он не выполняет это. Этот подход называется отложенным выполнением. Дополнительные сведения см. в разделе Введение в запросы 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. Нажмите клавишу ВВОД в окне консоли, чтобы закрыть приложение.

Дальнейшие шаги

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

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

См. также