Fakturačný systém v C # .NET - LocalDB a Entity Framework
V tomto tutoriálu sa naučíme vytvárať lokálnu databázu pre desktopovú aplikáciu a jej namapovanie na objekty pomocou Entity Framework. Pôjde o jednoduché účtovníctvo. Je požadovaná aspoň základná znalosť databáz, SQL a práca s kolekciami.
Sql CE
Do vydania Visual Studia 2013 sa pre malé databázy desktopových programov používal SQL Server Compact Edition - jednoduchá verzia SQL serveru tvorená iba DLL súbory. Nepodporuje pohľady, uložené procedúry, triggery a ďalšie. To nám u malej DB pre jednoduché ukladanie dát väčšinou stačí. Inštalačný súbor SQL CE má iba okolo 2MB.
LocalDB
Od VS2013 nejde štandardne vytvoriť .sdf databázy pre SQL CE. Už sa s CE nepočíta, aj keď to ide obísť pluginy. Preto si ukážeme, ako vytvoriť lokálnu databázu LocalDB. Tá je už plnohodnotná (ako SQL server Express) a pre jej spustenie na bežnom PC (bez VS a SQL severu) musíme nainštalovať + - 30MB inštalačný súbor. Viď. tady (ENG).
Vytvorenie databázy
Vytvoríme si nový konzolový projekt. Pre pridanie databázového súboru máme iba jednu možnosť - súbor mdf.
Nastavíme property databázy, aby sa nám databáza prepísala len pri zmene jej štruktúry a nie dát.
Tvorba tabuliek pre fakturačný systém
Majme tabuľku faktúra, ktorá má dva cudzie kľúče na tabuľku osoba. Tá reprezentuje dodávateľa alebo odberateľa.
Vytvoríme novú tabuľku cez Server Explorer.
Tabuľky môžeme naklikať alebo priamo napísať v SQL.
Samotnej 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]) )
Parameter IDENTITY pridá autoinkrement primárneho kľúča. DEFAULT 0 nastaví defaultná hodnotu na 0. Prepojenie cudzieho kľúča s primárnym by vám malo byť jasné.
Entity Framework
Databáze máme hotovú. Teraz potrebujeme pristupovať k DB objektovo.
Do projektu pridáme nový item ADO.NET Entity Data Model. Automaticky nám vygeneruje triedy a ich vzťahy podľa DB. Je tu ešte možnosť - vybrať EF DbContext Generator, ale tým sa tu nebudeme zaoberať (podľa napísaných tried pristupuje k DB alebo DB môže i vygenerovať).
Vyberieme generovanie z databázy.
Vyberieme našu databázu
Vyberieme tabuľky do ktorých chceme pristupovať, zaškrtneme generovanie množných čísel u názvov objektov a klikneme na finish.
Zobrazí sa diagram našej databázy. Premenujeme si názvy referencií (Person1, Invoices1) nech sa v tom potom vyznáme.
Používanie Entity Framework
Použitie EF je veľmi jednoduché. Vytvoríme si inštanciu triedy DbInvoiceEntities. Tá obsahuje kolekcia záznamov jednotlivých tabuliek. Kolekcia môžeme filtrovať, prehľadávať atď. Viz. tunajšie tutoriály.
Pridanie 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();
Pokiaľ objektu newPerson nenastavíte nejakú not null property, pri spustení sa zobrazí výnimka.
Jednoduchý výpis v konzole s hľadaní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áverom
V tomto tutoriále sme si ukázali, ako sa v C# .NET vytvára a pracuje s lokálnou databázou. Vytvorili sme databázu a ORM pre jednoduchý fakturačný systém. V ďalšom tutoriále pridáme grafické rozhranie skrze Windows Presentation Foundation.
Ak vám niečo nefunguje alebo niečomu nerozumiete, napíšte do diskusie, nech to môžem v článku prípadne poupraviť.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 1883x (10.45 MB)