Návod: Jednoduchý objektový model a dotaz (C#)
Tento názorný postup poskytuje základní komplexní scénář LINQ to SQL s minimálními složitostmi. Vytvoříte třídu entity, která modeluje tabulku Customers v ukázkové databázi Northwind. Pak vytvoříte jednoduchý dotaz, který zobrazí seznam zákazníků, kteří se nacházejí v Londýně.
Tento názorný postup je orientovaný na kód, který umožňuje zobrazit koncepty LINQ to SQL. Normálně byste použili Návrhář relací objektů k vytvoření objektového modelu.
Poznámka:
Váš počítač může v následujících pokynech zobrazovat odlišné názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení integrovaného vývojového prostředí.
Tento návod byl napsán pomocí vývojového Nastavení jazyka Visual C#.
Požadavky
Tento názorný postup používá k uložení souborů vyhrazenou složku (c:\linqtest5). Vytvořte tuto složku před zahájením návodu.
Tento názorný postup vyžaduje ukázkovou databázi Northwind. Pokud tuto databázi nemáte na vývojovém počítači, můžete ji stáhnout z webu pro stažení microsoftu. Pokyny najdete v tématu Stažení ukázkových databází. Po stažení databáze zkopírujte soubor do složky c:\linqtest5.
Přehled
Tento názorný postup se skládá ze šesti hlavních úloh:
Vytvoření řešení LINQ to SQL v sadě Visual Studio
Mapování třídy na tabulku databáze
Navrhování vlastností ve třídě tak, aby představovaly sloupce databáze.
Určuje připojení k databázi Northwind.
Vytvoření jednoduchého dotazu pro spuštění v databázi
Provedení dotazu a sledování výsledků
Vytvoření řešení LINQ to SQL
V tomto prvním úkolu vytvoříte řešení sady Visual Studio, které obsahuje potřebné odkazy na sestavení a spuštění projektu LINQ to SQL.
Vytvoření řešení LINQ to SQL
V nabídce Soubor sady Visual Studio přejděte na příkaz Nový a klepněte na tlačítko Projekt.
V podokně Typy projektů v dialogovém okně Nový projekt klikněte na Visual C#.
V podokně Šablony klikněte na Konzolová aplikace.
Do pole Název zadejte LinqConsoleApp.
V poli Umístění ověřte, kam chcete ukládat soubory projektu.
Klikněte na OK.
Přidání odkazů a direktiv LINQ
Tento názorný postup používá sestavení, která nemusí být ve výchozím nastavení v projektu nainstalována. Pokud system.Data.Linq není v projektu uvedený jako odkaz (rozbalte uzel Reference v Průzkumník řešení), přidejte ho, jak je vysvětleno v následujících krocích.
Přidání System.Data.Linq
V Průzkumník řešení klepněte pravým tlačítkem myši Na odkazy a klepněte na tlačítko Přidat odkaz.
V dialogovém okně Přidat odkaz klepněte na tlačítko .NET, klepněte na system.Data.Linq sestavení a klepněte na tlačítko OK.
Sestavení se přidá do projektu.
Na začátek Program.cs přidejte následující direktivy:
using System.Data.Linq; using System.Data.Linq.Mapping;
Mapování třídy na tabulku databáze
V tomto kroku vytvoříte třídu a namapujete ji na tabulku databáze. Taková třída je označena jako třída entity. Všimněte si, že mapování se provádí pouhým přidáním atributu TableAttribute . Vlastnost Name určuje název tabulky v databázi.
Vytvoření třídy entity a jeho mapování na tabulku databáze
Do Program.cs bezprostředně nad
Program
deklaraci třídy zadejte nebo vložte následující kód:[Table(Name = "Customers")] public class Customer { }
Navrhování vlastností ve třídě pro reprezentaci databázových sloupců
V tomto kroku provedete několik úkolů.
Atribut použijete ColumnAttribute k určení
CustomerID
aCity
vlastnostem třídy entity jako představující sloupce v tabulce databáze.Vlastnost označíte
CustomerID
jako představující sloupec primárního klíče v databázi.Určíte
_CustomerID
a_City
pole pro privátní úložiště. LINQ to SQL pak může ukládat a načítat hodnoty přímo místo použití veřejných přístupových objektů, které můžou zahrnovat obchodní logiku.
Znázornění charakteristik dvou sloupců databáze
Zadejte nebo vložte následující kód do Program.cs uvnitř složených závorek pro
Customer
třídu.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; } }
Určení Připojení ion do databáze Northwind
V tomto kroku pomocí objektu DataContext vytvoříte propojení mezi strukturami dat založenými na kódu a samotnou databází. Jedná se DataContext o hlavní kanál, prostřednictvím kterého načtete objekty z databáze a odešlete změny.
Deklarujete Table<Customer>
také, že se bude chovat jako logická tabulka typu pro dotazy na tabulku Customers v databázi. Tyto dotazy vytvoříte a spustíte v dalších krocích.
Určení připojení k databázi
Do metody zadejte nebo vložte následující kód
Main
.Všimněte si, že se předpokládá
northwnd.mdf
, že soubor je ve složce linqtest5. Další informace najdete v části Požadavky uvedené výše v tomto názorném postupu.// 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>();
Vytvoření jednoduchého dotazu
V tomto kroku vytvoříte dotaz, který vyhledá zákazníky v tabulce Zákazníci databáze v Londýně. Kód dotazu v tomto kroku pouze popisuje dotaz. Nespustí ho. Tento přístup se označuje jako odložené spuštění. Další informace najdete v tématu Úvod k dotazům LINQ (C#).
Vytvoříte také výstup protokolu, který zobrazí příkazy SQL, které LINQ to SQL generuje. Tato funkce protokolování (která používá Log) je užitečná při ladění a při určování, že příkazy odesílané do databáze přesně představují váš dotaz.
Vytvoření jednoduchého dotazu
Zadejte nebo vložte následující kód do
Main
metody zaTable<Customer>
deklaraci.// 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;
Spuštění dotazu
V tomto kroku dotaz skutečně spustíte. Výrazy dotazu, které jste vytvořili v předchozích krocích, se nevyhodnocují, dokud nebudou potřebné výsledky. Při zahájení foreach
iterace se provede příkaz SQL pro databázi a objekty jsou materializovány.
Provedení dotazu
Na konec
Main
metody zadejte nebo vložte následující kód (za popis dotazu).foreach (Customer cust in custQuery) { Console.WriteLine("ID={0}, City={1}", cust.CustomerID, cust.City); } // Prevent console window from closing. Console.ReadLine();
Stisknutím klávesy F5 spusťte ladění aplikace.
Poznámka:
Pokud vaše aplikace generuje chybu za běhu, přečtěte si část Řešení potíží Učení podle návodů.
Výsledky dotazu v okně konzoly by se měly zobrazit takto:
ID=AROUT, City=London
ID=BSBEV, City=London
ID=CONSH, City=London
ID=EASTC, City=London
ID=NORTS, City=London
ID=SEVES, City=London
Stisknutím klávesy Enter v okně konzoly aplikaci zavřete.
Další kroky
Návod: Dotazování napříč relacemi (C#) pokračuje tam, kde tento návod končí. Návod k dotazování napříč relacemi ukazuje, jak může LINQ to SQL dotazovat napříč tabulkami, podobně jako spojení v relační databázi.
Pokud chcete provést názorný postup dotazování napříč relacemi, nezapomeňte uložit řešení pro právě dokončený návod, což je předpokladem.