Fakturačný systém v C# .NET - LocalDB a Entity Framework
V tomto tutoriále sa naučíme vytvárať lokálnu databázu pre desktopovú aplikáciu a jej namapovanie na objekty pomocou Entity Frameworku. 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 servera tvorená iba DLL súbormi. Nepodporuje pohľady, uložené procedúry, triggery a ďalšie. To nám pri malej DB pre jednoduché ukladanie dát väčšinou stačí. Inštalačný súbor SQL CE má iba okolo 2MB.
LocalDB
Od VS2013 sa nedá štandardne vytvoriť .sdf databáza 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. Pozri. tu(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 iba 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.
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]) )
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ázu 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 aj 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 pri názvoch 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 Frameworku
Použitie EF je veľmi jednoduché. Vytvoríme si inštanciu triedy DbInvoiceEntities. Tá obsahuje kolekcie záznamov jednotlivých tabuliek. Kolekcie môžeme filtrovať, prehľadávať atď. viď. 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íme 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 cez Windows Presentation Foundation.
Pokiaľ 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é 1958x (10.45 MB)