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


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

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

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

Внимание

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

Пример 1

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

// DataContext takes a connection string.
DataContext db = new DataContext(@"c:\Northwind.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);
' DataContext takes a connection string.
Dim db As New DataContext("…\Northwind.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

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

Пример 2

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

public partial class Northwind : DataContext
{
    public Table<Customer> Customers;
    public Table<Order> Orders;
    public Northwind(string connection) : base(connection) { }
}
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

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

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

См. также