Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Приступая к работе (linq to sql)

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

  • В следующем примере кода создается объект nwдля представления базы данных Northwind, выполняется запрос к таблицеCustomers, фильтруются строки для поиска клиентов (Customers) из Лондона (London) и выбирается строка CompanyName для извлечения.

  • При выполнении цикла извлекается коллекция значений CompanyName.

  • C#

  • // Northwnd inherits from System.Data.Linq.DataContext.

  • Northwnd nw = new Northwnd(@"northwnd.mdf");

  • // or, if you are not using SQL Server Express

  • // Northwnd nw = new Northwnd("Database=Northwind;Server=server_name;Integrated Security=SSPI");

  • var companyNameQuery =

  • from cust in nw.Customers

  • where cust.City == "London"

  • select cust.CompanyName;

  • foreach (var customer in companyNameQuery)

  • {

  • Console.WriteLine(customer);

  • }

Модель объектов linq to sql

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

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

В следующей таблице представлены самые основные элементы в объектной модели LINQ to SQL и их связь с элементами в реляционной модели данных.

Объектная модель LINQ to SQL

Реляционная модель данных

Класс сущностей

Таблица

Член класса

Столбец

Ассоциация

Связь по внешнему ключу

Метод

Хранимая процедура или функция

Классы сущностей и баз данных linq to sql

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

[Table(Name = "Customers")]

public class Customer

{

public string CustomerID;

// ...

public string City;

}

В базе данных могут быть сохранены только экземпляры классов, сопоставленные таблицам (то есть классы сущностей).

Столбцы членов класса и базы данных LINQ to SQL

Кроме связывания классов с таблицами, можно назначить поля или свойства для представления столбцов базы данных. Для этого LINQ to SQL определяет атрибут ColumnAttribute, как показано в следующем примере.

[Table(Name = "Customers")]

public class Customer

{

[Column(IsPrimaryKey = true)]

public string CustomerID;

[Column]

public string City;

}

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

LINQ to SQL сопоставляет базу данных SQL Server с объектной моделью LINQ to SQL либо путем применения атрибутов, либо с использованием файла внешнего сопоставления. В этом разделе представлен подход на основе атрибутов.

В своей самой простой форме LINQ to SQL сопоставляет базу данных с DataContext, таблицу с классом сущностей, а столбцы и связи — со свойствами этих классов сущностей.

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

В целом, экземпляр DataContext предназначен для одной "единицы работы" вне зависимости от того, как приложение определяет этот термин. DataContext является простым объектом, и его создание не требует больших затрат ресурсов. Обычное приложение LINQ to SQL создает экземпляры DataContext в области метода или как элемент кратковременных классов, представляющих логический набор связанных операций базы данных.

Разработчики, использующие Visual Studio, обычно выполняют сопоставление на основе атрибутов с помощью конструктора Реляционный конструктор объектов.