Как соединиться с базой данных (LINQ to SQL)

Основным каналом, через который выполняется подключение к базе данных, извлекаются объекты и отправляются изменения обратно в базу данных, является класс DataContext. Класс DataContext можно использовать точно так же, как используется класс ADO.NET SqlConnection. В действительности класс DataContext инициализируется с помощью предоставляемого пользователем подключения или строки подключения. Дополнительные сведения см. в разделе Методы DataContext (реляционный конструктор объектов).

Класс DataContext предназначен для преобразования запросов на получение объектов в запросы SQL, которые должны выполняться в базе данных, и последующей сборки объектов из результатов. Класс DataContext поддерживает технологию LINQ (Language-Integrated Query) посредством реализации шаблона операторов, аналогичного стандартным операторам запросов, такими как Where и Select.

Примечание о безопасностиПримечание по безопасности

Одной из важнейших задач является обеспечение безопасности подключения.Дополнительные сведения см. в разделе Безопасность в LINQ to SQL.

Пример

В следующем примере класс DataContext используется для подключения к учебной базе данных "Northwind" и извлечения строк заказчиков, расположенных в Лондоне.

' DataContext takes a connection string.
Dim db As New DataContext("…\Northwnd.mdf")

' Get a typed table to run queries.
Dim Customers As Table(Of Customer) = db.GetTable(Of Customer)()

' Query for customer from London.
Dim Query = _
    From cust In Customers _
    Where cust.City = "London" _
    Select cust

For Each cust In Query
    Console.WriteLine("id=" & cust.CustomerID & _
        ", City=" & cust.City)
Next
// DataContext takes a connection string. 
DataContext db = new DataContext(@"c:\Northwnd.mdf");

// Get a typed table to run queries.
Table<Customer> Customers = db.GetTable<Customer>();

// Query for customers from London.
var query =
    from cust in Customers
    where cust.City == "London"
    select cust;

foreach (var cust in query)
    Console.WriteLine("id = {0}, City = {1}", cust.CustomerID, cust.City);

Каждая таблица базы данных представлена коллекцией Table, доступной с помощью метода GetTable. Для идентификации таблицы используется класс сущностей.

Рекомендация заключается в объявлении строго типизированного класса DataContext вместо использования базового класса DataContext и метода GetTable. Строго типизированный класс DataContext объявляет все коллекции Table в качестве членов контекста, как показано в следующем примере.

Partial Public Class Northwind
    Inherits DataContext
    Public Customers As Table(Of Customer)
    Public Orders As Table(Of Order)
    Public Sub New(ByVal connection As String)
        MyBase.New(connection)
    End Sub
End Class
public partial class Northwind : DataContext
{
    public Table<Customer> Customers;
    public Table<Order> Orders;
    public Northwind(string connection) : base(connection) { }
}

После этого создание запроса на получение клиентов из Лондона можно осуществить более простым способом:

Dim db As New Northwind("...\Northwnd.mdf")

Dim query = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust

For Each cust In query
    Console.WriteLine("id=" & cust.CustomerID & _
        ", City=" & cust.City)
Next
Northwnd db = new Northwnd(@"c:\Northwnd.mdf");
var query =
    from cust in db.Customers
    where cust.City == "London"
    select cust;
foreach (var cust in query)
    Console.WriteLine("id = {0}, City = {1}", cust.CustomerID,
        cust.City);

См. также

Другие ресурсы

Взаимодействие с базой данных (LINQ to SQL)