Пошаговое руководство. Простая модель объектов и простой запрос (C#) (LINQ to SQL)
Обновлен: November 2007
В данном пошаговом руководстве представлен основной и полный сценарий LINQ to SQL с подробным объяснением выполняемых действий. В нем создается класс сущностей, который моделирует таблицу Customers в учебной базе данных Northwind. После этого создается простой запрос на получение списка клиентов, находящихся в Лондоне.
Данное руководство ориентировано на создание кода, чтобы продемонстрировать основные понятия технологии LINQ to SQL. Обычно с помощью Сред. Объектно-реляционный конструктор создается собственная модель объектов. Дополнительные сведения см. в разделах Реляционный конструктор объектов и Реляционный конструктор объектов и Реляционный конструктор объектов.
Примечание. |
---|
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Это пошаговое руководство было написано с использованием параметров разработки Visual C#.
Предварительные требования
Для хранения файлов используется выделенная папка ("c:\linqtest5"). Прежде чем приступить к выполнению задач, создайте эту папку.
В данном пошаговом руководстве требуется доступ к учебной базе данных Northwind. Если база данных не установлена на компьютере разработчика, загрузите ее с веб-узла Центра загрузки Майкрософт. Инструкции см. в разделе Загрузка образцов баз данных (LINQ to SQL). После загрузки базы данных скопируйте файл в папку c:\linqtest5.
Общие сведения
Данное пошаговое руководство состоит из шести основных задач.
Создание решения LINQ to SQL в среде Visual Studio.
Сопоставление класса с таблицей базы данных.
Назначение свойств классу для представления столбцов базы данных.
Указание подключения к базе данных Northwind.
Создание простого запроса к базе данных.
Выполнение запроса и просмотр результатов.
Создание решения LINQ to SQL
В первой задаче создается решение Visual Studio, которое содержит ссылки, необходимые для построения и выполнения проекта LINQ to SQL.
Создание решения LINQ to SQL
В меню Файл среды Visual Studio выберите пункт Создать и щелкните команду Проект.
В диалоговом окне Создание проекта в области Тип проекта выберите Visual C#.
В области Шаблоны щелкните Консольное приложение.
В поле Имя введите LinqConsoleApp.
В поле Расположение выберите папку для сохранения файлов проекта.
Нажмите кнопку ОК.
Добавление ссылок и директив LINQ
В этом пошаговом руководстве используются сборки, которые могут быть не установлены по умолчанию в проект. Если System.Data.Linq не входит в список ссылок проекта (разверните узел Ссылки в обозревателе решений), добавьте ее, как описано в следующих действиях.
Добавление сборки System.Data.Linq
В Обозревателе решений щелкните правой кнопкой мыши узел Ссылки и выберите команду Добавить ссылку.
В диалоговом окне Добавление ссылки щелкните .NET, выберите сборку System.Data.Linq, а затем нажмите кнопку ОК.
Сборка будет добавлена в проект.
Добавьте следующие директивы в начало 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.
Можно также записать выходные данные в журнал, чтобы продемонстрировать команды 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 для базы данных и объекты материализуются.
Выполнение запроса
Введите или вставьте следующий код в конце метода Main (после описания запроса).
foreach (Customer cust in custQuery) { Console.WriteLine("ID={0}, City={1}", cust.CustomerID, cust.City); } // Prevent console window from closing. Console.ReadLine();
Нажмите клавишу F5, чтобы начать отладку приложения.
Примечание. Если во время выполнения приложение создает ошибку, см. подраздел "Устранение неполадок" раздела Обучение с помощью пошаговых руководств (LINQ to SQL).
В окне консоли отображаются следующие результаты запроса.
ID=AROUT, City=London
ID=BSBEV, City=London
ID=CONSH, City=London
ID=EASTC, City=London
ID=NORTS, City=London
ID=SEVES, City=London
Чтобы закрыть приложение, в окне консоли нажмите клавишу ВВОД.
Следующие действия
Раздел Пошаговое руководство. Запросы по связям (C#) (LINQ to SQL) начинается с того места, где заканчивается данное руководство. В пошаговом руководстве "Выполнение запросов в связях" демонстрируется, как технология LINQ to SQL может выполнять запросы в таблицах, аналогичные соединениям в реляционных базах данных.
Если требуется выполнить пошаговое руководство "Выполнение запросов в связях", необходимо сохранить решение, созданное в процессе только что завершенного пошагового руководства. Это условие является обязательным.