Udostępnij za pośrednictwem


Przewodnik: prosty model obiektów i zapytanie (C#)

Ten przewodnik zawiera podstawowy całościowy scenariusz LINQ to SQL z małą ilością złożoności. Utworzysz klasę jednostek, która modeluje tabelę Customers w przykładowej bazie danych Northwind. Następnie utworzysz proste zapytanie, aby wyświetlić listę klientów, którzy znajdują się w Londynie.

Ten przewodnik jest celowo zorientowany na kod, aby skutecznie przedstawić koncepcje LINQ to SQL. Zwykle należy użyć Projektanta relacyjnego obiektu do utworzenia modelu obiektów.

Uwaga / Notatka

Na komputerze mogą być wyświetlane różne nazwy lub lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio w poniższych instrukcjach. Wersja programu Visual Studio i ustawienia, których używasz, określają te elementy. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.

Ten przewodnik został napisany przy użyciu ustawień programowania języka Visual C#.

Wymagania wstępne

  • Ten przewodnik używa dedykowanego folderu ("c:\linqtest5") do przechowywania plików. Przed rozpoczęciem przewodnika utwórz ten folder.

  • Ten przewodnik wymaga przykładowej bazy danych Northwind. Jeśli nie masz tej bazy danych na komputerze dewelopera, możesz pobrać ją z witryny pobierania firmy Microsoft. Aby uzyskać instrukcje, zobacz Pobieranie przykładowych baz danych. Po pobraniu bazy danych skopiuj plik do folderu c:\linqtest5.

Przegląd

Ten przewodnik składa się z sześciu głównych zadań:

  • Tworzenie rozwiązania LINQ to SQL w programie Visual Studio.

  • Mapowanie klasy na tabelę bazy danych.

  • Wyznaczanie właściwości klasy w celu reprezentowania kolumn bazy danych.

  • Określanie połączenia z bazą danych Northwind.

  • Tworzenie prostego zapytania, które można uruchomić na bazie danych.

  • Wykonywanie zapytania i obserwowanie wyników.

Tworzenie rozwiązania LINQ to SQL

W tym pierwszym zadaniu utworzysz rozwiązanie programu Visual Studio zawierające niezbędne odwołania do kompilowania i uruchamiania projektu LINQ to SQL.

Aby utworzyć rozwiązanie LINQ to SQL

  1. W menu Plik programu Visual Studio wskaż polecenie Nowy, a następnie kliknij pozycję Projekt.

  2. W okienku Typy projektów w oknie dialogowym Nowy projekt kliknij pozycję Visual C#.

  3. W okienku Szablony kliknij pozycję Aplikacja konsolowa.

  4. W polu Nazwa wpisz LinqConsoleApp.

  5. W polu Lokalizacja sprawdź, gdzie chcesz przechowywać pliki projektu.

  6. Kliknij przycisk OK.

Dodawanie odwołań i dyrektyw LINQ

W tym przewodniku używane są zestawy, które mogą nie być instalowane domyślnie w projekcie. Jeśli element System.Data.Linq nie jest wymieniony jako odwołanie w projekcie (rozwiń węzeł Odwołania w Eksploratorze rozwiązań), dodaj go zgodnie z opisem w poniższych krokach.

Aby dodać System.Data.Linq

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję Odwołania, a następnie kliknij polecenie Dodaj odwołanie.

  2. W oknie dialogowym Dodawanie odwołania kliknij pozycję .NET, kliknij zestaw System.Data.Linq, a następnie kliknij przycisk OK.

    Zestaw jest dodawany do projektu.

  3. Dodaj następujące dyrektywy w górnej części Program.cs:

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

Mapowanie klasy na tabelę bazy danych

W tym kroku utworzysz klasę i zamapujesz ją na tabelę bazy danych. Taka klasa jest określana jako klasa jednostki. Należy pamiętać, że mapowanie jest wykonywane przez dodanie atrybutu TableAttribute . Właściwość Name określa nazwę tabeli w bazie danych.

Aby utworzyć klasę jednostki i zamapować ją na tabelę bazy danych

  • Wpisz lub wklej następujący kod do Program.cs bezpośrednio nad deklaracją Program klasy:

    [Table(Name = "Customers")]
    public class Customer
    {
    }
    

Wyznaczanie właściwości klasy do reprezentowania kolumn bazy danych

W tym kroku wykonasz kilka zadań.

  • Za pomocą atrybutu ColumnAttribute określasz właściwości CustomerID i City w klasie jednostki jako kolumny w tabeli bazy danych.

  • Właściwość CustomerID oznacza kolumnę klucza podstawowego w bazie danych.

  • Wyznaczasz pola _CustomerID i _City dla magazynu prywatnego. LinQ to SQL może następnie przechowywać i pobierać wartości bezpośrednio, zamiast korzystać z publicznych metod dostępu, które mogą obejmować logikę biznesową.

Aby reprezentować cechy dwóch kolumn bazy danych

  • Wpisz lub wklej następujący kod do Program.cs wewnątrz nawiasów klamrowych dla klasy Customer.

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

Określanie połączenia z bazą danych Northwind

W tym kroku użyjesz DataContext obiektu do nawiązania połączenia między strukturami danych opartymi na kodzie a samą bazą danych. Głównym kanałem jest DataContext, za pomocą którego pobierasz obiekty z bazy danych i dokonujesz zmian.

Deklarujesz także Table<Customer>, aby działała jako logiczna, silnie typowana tabela dla zapytań do tabeli Customers w bazie danych. Te zapytania zostaną utworzone i wykonane w kolejnych krokach.

Aby określić połączenie z bazą danych

  • Wpisz lub wklej następujący kod do Main metody .

    Należy pamiętać, że northwnd.mdf plik znajduje się w folderze linqtest5. Aby uzyskać więcej informacji, zobacz sekcję Wymagania wstępne we wcześniejszej części tego przewodnika.

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

Tworzenie prostego zapytania

W tym kroku utworzysz zapytanie, aby znaleźć, którzy klienci w tabeli Klienci znajdują się w Londynie. Kod zapytania w tym kroku opisuje tylko zapytanie. Nie wykonuje go. Takie podejście jest nazywane odroczonym wykonywaniem. Aby uzyskać więcej informacji, zobacz Wprowadzenie do zapytań LINQ (C#).

Utworzysz również dane wyjściowe dziennika, aby wyświetlić polecenia SQL generowane przez linQ to SQL. Ta funkcja rejestrowania (korzystająca z funkcji Log) jest przydatna podczas debugowania i do określania, że polecenia wysyłane do bazy danych dokładnie reprezentują zapytanie.

Aby utworzyć proste zapytanie

  • Wpisz lub wklej następujący kod do Main metody po deklaracji 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;
    

Wykonywanie zapytania

W tym kroku wykonasz zapytanie. Wyrażenia zapytania utworzone w poprzednich krokach nie są oceniane, dopóki nie będą potrzebne wyniki. Po rozpoczęciu foreach iteracji polecenie SQL jest wykonywane względem bazy danych, a obiekty są zmaterializowane.

Aby wykonać zapytanie

  1. Wpisz lub wklej następujący kod na końcu Main metody (po opisie zapytania).

    foreach (Customer cust in custQuery)
    {
        Console.WriteLine("ID={0}, City={1}", cust.CustomerID,
            cust.City);
    }
    
    // Prevent console window from closing.
    Console.ReadLine();
    
  2. Naciśnij F5, aby debugować aplikację.

    Uwaga / Notatka

    Jeśli aplikacja generuje błąd czasu wykonywania, zajrzyj do sekcji Rozwiązywanie problemów w Ucz się przez przewodniki.

    Wyniki zapytania w oknie konsoli powinny wyglądać następująco:

    ID=AROUT, City=London

    ID=BSBEV, City=London

    ID=CONSH, City=London

    ID=EASTC, City=London

    ID=NORTS, City=London

    ID=SEVES, City=London

  3. Naciśnij Enter w oknie konsoli, aby zamknąć aplikację.

Dalsze kroki

Przewodnik Walkthrough: Querying Across Relationships (C#) kontynuuje się tam, gdzie kończy się ten przewodnik. Przewodnik Zapytania między relacjami pokazuje, jak LINQ to SQL może wykonywać zapytania między tabelami, podobnie jak sprzężenia w relacyjnej bazie danych.

Jeśli chcesz wykonać przewodnik dotyczący zapytań obejmujących relacje, pamiętaj, aby zapisać rozwiązanie dla właśnie ukończonego przewodnika, ponieważ jest to warunek wstępny.

Zobacz także