Idioma

Como: Ligar a uma Base de Dados

Importante

Não utilize System.Data.SqlClient para novo desenvolvimento. Utilize Microsoft.Data.SqlClient para novo código de acesso a dados do SQL Server. Estes exemplos mantêm-se System.Data.SqlClient porque o fornecedor LINQ para SQL incorporado do .NET Framework o exige. Mudar só o tipo de ligação não faz a migração de LINQ to SQL.

DataContext é o principal mecanismo de ligação através do qual se liga a uma base de dados, recupera objetos dela e submete alterações de volta. Usas o DataContext tal como usarias um ADO.NET SqlConnection. Na verdade, o DataContext é inicializado com uma ligação ou cadeia de ligação que fornecer. Para mais informações, consulte Métodos DataContext (O/R Designer).

O objetivo do DataContext mapper é traduzir os seus pedidos de objetos em consultas SQL a serem feitas à base de dados e depois montar objetos a partir dos resultados. DataContext permite o Language-Integrated Query (LINQ) ao implementar o mesmo padrão de operadores dos Standard Query Operators, como Where e Select.

Importante

Manter uma ligação segura é de extrema importância. Para obter mais informações, consulte Segurança em LINQ to SQL.

Exemplo 1

No exemplo seguinte, o DataContext é usado para se ligar à base de dados de amostras da Northwind e para recuperar linhas de clientes cuja cidade é Londres.

// Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
// LINQ to SQL's built-in provider requires System.Data.SqlClient.
// 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);
' Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
' LINQ to SQL's built-in provider requires System.Data.SqlClient.
' 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

Cada tabela de base de dados é representada como uma Table coleção disponível através do GetTable método, utilizando a classe entidade para a identificar.

Exemplo 2

A melhor prática é declarar um DataContext fortemente tipado em vez de depender da classe básica DataContext e do método GetTable. Um contexto fortemente tipado DataContext declara todas as coleções Table como membros do contexto, como no exemplo seguinte.

// Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
// LINQ to SQL's built-in provider requires System.Data.SqlClient.
public partial class Northwind : DataContext
{
    public Table<Customer> Customers;
    public Table<Order> Orders;
    public Northwind(string connection) : base(connection) { }
}
' Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
' LINQ to SQL's built-in provider requires System.Data.SqlClient.
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

Pode então expressar a consulta para clientes de Londres de forma mais simples como:

// Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
// LINQ to SQL's built-in provider requires System.Data.SqlClient.
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);
' Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
' LINQ to SQL's built-in provider requires System.Data.SqlClient.
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

Ver também