Fakturační systém v C# .NET - LocalDB a Entity Framework
V tomto tutoriálu se naučíme vytvářet lokální databázi pro desktopovou aplikaci a její namapování na objekty pomocí Entity Frameworku. Půjde o jednoduché účetnictví. Je požadována alespoň základní znalost databází, SQL a práce s kolekcemi.
SQL CE
Do vydání Visual Studia 2013 se pro malé databáze desktopových programů používal SQL Server Compact Edition - jednoduchá verze SQL serveru tvořená pouze DLL soubory. Nepodporuje pohledy, uložené procedury, triggery a další. To nám u malé DB pro jednoduché ukládaní dat většinou stačí. Instalační soubor SQL CE má pouze kolem 2MB.
LocalDB
Od VS2013 nejde standardně vytvořit .sdf databáze pro SQL CE. Už se s CE nepočítá, i když to jde obejít pluginy. Proto si ukážeme, jak vytvořit lokální databázi LocalDB. Ta je už plnohodnotná (jako SQL server Express) a pro její spuštění na běžném PC (bez VS a SQL severu) musíme nainstalovat +- 30MB instalační soubor. Viz. tady(ENG).
Vytvoření databáze
Vytvoříme si nový konzolový projekt. Pro přidání databázového souboru máme pouze jednu možnost - soubor mdf.
![Přidání databázového souboru v C# .NET - Databáze v C# - ADO.NET](images/8198/invoice_sys/createmdf.jpg)
Nastavíme property databáze, aby se nám databáze přepsala pouze při změně její struktury a ne dat.
![Vlastnosti databáze v C# .NET - Databáze v C# - ADO.NET](images/8198/invoice_sys/mdfproperty.jpg)
Tvorba tabulek pro fakturační systém
Mějme tabulku faktura, která má dva cizí klíče na tabulku osoba. Ta reprezentuje dodavatele nebo odběratele.
Vytvoříme novou tabulku přes Server Explorer.
![Vytvoření nové databázové tabulky - Databáze v C# - ADO.NET](images/8198/invoice_sys/serverexplorer.jpg)
Tabulky můžeme naklikat nebo přímo napsat v SQL .
![Tvorba databázových tabulek ve Visual Studio - Databáze v C# - ADO.NET](images/8198/invoice_sys/dbtables.jpg)
Samotné SQL
CREATE TABLE [dbo].[Person] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Name] NVARCHAR(100) NULL, [Surname] NVARCHAR(100) NOT NULL, [ICO] INT NULL, [DIC] NVARCHAR(20) NULL, [Street] NVARCHAR(100) NOT NULL, [City] NVARCHAR(100) NOT NULL, [PSC] INT NOT NULL, [Email] NVARCHAR(50) NOT NULL, [IsDeleted] TINYINT NOT NULL DEFAULT 0 ) CREATE TABLE [dbo].[Invoice] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Supplier] INT NOT NULL, [Customer] INT NOT NULL, [Price] INT NOT NULL, [Service] NVARCHAR(200) NOT NULL, [Date] DATETIME NOT NULL, [InvoiceNumber] INT NOT NULL, [IsDeleted] TINYINT NOT NULL DEFAULT 0, CONSTRAINT [FK_Supplier] FOREIGN KEY ([Supplier]) REFERENCES [Person]([Id]), CONSTRAINT [FK_Customer] FOREIGN KEY ([Customer]) REFERENCES [Person]([Id]) )
Parametr IDENTITY přidá autoinkrement primárního klíče. DEFAULT 0 nastaví defaultní hodnotu na 0. Propojení cizího klíče s primárním by vám mělo být jasné.
Entity Framework
Databázi máme hotovou. Nyní potřebujeme přistupovat k DB objektově.
Do projektu přidáme nový item ADO.NET Entity Data Model. Automaticky nám vygeneruje třídy a jejich vztahy podle DB. Je tu ještě možnost - vybrat EF DbContext Generator, ale tím se zde nebudeme zabývat (podle napsaných tříd přistupuje k DB nebo DB může i vygenerovat).
![Entity Framework v C# .NET - Databáze v C# - ADO.NET](images/8198/invoice_sys/ado.jpg)
Vybereme generování z databáze.
![Entity Framework v C# .NET - Databáze v C# - ADO.NET](images/8198/invoice_sys/modeldb.jpg)
Vybereme naši databázi
![Entity Framework v C# .NET - Databáze v C# - ADO.NET](images/8198/invoice_sys/modelsett1.jpg)
Vybereme tabulky do kterých chceme přistupovat, zaškrtneme generování množných čísel u názvů objektů a klikneme na finish.
![Entity Framework v C# .NET - Databáze v C# - ADO.NET](images/8198/invoice_sys/modelsett2.jpg)
Zobrazí se diagram naší databáze. Přejmenujeme si názvy referencí (Person1, Invoices1) ať se v tom pak vyznáme.
![Entity Framework v C# .NET - Databáze v C# - ADO.NET](images/8198/invoice_sys/diagramdb.jpg)
Používání Entity Frameworku
Použití EF je velice jednoduché. Vytvoříme si instanci třídy DbInvoiceEntities. Ta obsahuje kolekce záznamů jednotlivých tabulek. Kolekce můžeme filtrovat, prohledávat atd. viz. zdejší tutoriály.
Přidání nového záznamu.
DbInvoiceEntities db = new DbInvoiceEntities(); Person newPerson = new Person(); newPerson.Name = "Jméno"; newPerson.Surname = "Příjmení"; newPerson.Street = "Ulice"; newPerson.City = "Město"; newPerson.PSC = 73601; newPerson.ICO = 78321456; newPerson.DIC = "CZ78321456"; newPerson.Email = "[email protected]"; db.Persons.Add(newPerson); db.SaveChanges();
Pokud objektu newPerson nenastavíme nějakou not null property, při spuštění se zobrazí výjimka.
![Entity Framework v C# .NET - Databáze v C# - ADO.NET](images/8198/invoice_sys/valerror.jpg)
Jednoduchý výpis v konzoli s hledáním.
Console.WriteLine("Persons: "); foreach (Person p in db.Persons) { Console.WriteLine(p.Surname + " " + p.Name + ", city: " + p.City); } Console.WriteLine(Environment.NewLine); Console.WriteLine("Invoices: "); foreach (Invoice i in db.Invoices) { Console.WriteLine("Price: " + i.Price + ", date: " + i.Date); } Console.WriteLine(Environment.NewLine + "Search Pepa: "); Person foundPerson = db.Persons.FirstOrDefault(p => p.Name.Contains("pepa")); Console.WriteLine(foundPerson.Surname + " " + foundPerson.Name + ", city: " + foundPerson.City);
Závěrem
V tomto tutoriálu jsme si ukázali, jak se v C# .NET vytváří a pracuje s lokální databází. Vytvořili jsme databázi a ORM pro jednoduchý fakturační systém. V dalším tutoriálu přidáme grafické rozhraní skrze Windows Presentation Foundation.
Pokuď vám něco nefunguje nebo něčemu nerozumíte, napište do diskuze, ať to můžu v článku případně poupravit.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkamiStaženo 1893x (10.45 MB)