Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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.

Pridanie databázového súboru v C# .NET - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

Nastavíme property databázy, aby sa nám databáza prepísala iba pri zmene jej štruktúry a nie dát.

Vlastnosti databázy v C# .NET - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

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.

Vytvorenie novej databázovej tabuľky - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

Tabuľky môžeme naklikať alebo priamo napísať v SQL.

Tvorba databázových tabuliek vo Visual Studio - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

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ť).

Entity Framework v C# .NET - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

Vyberieme generovanie z databázy.

Entity Framework v C# .NET - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

Vyberieme našu databázu

Entity Framework v C# .NET - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

Vyberieme tabuľky do ktorých chceme pristupovať, zaškrtneme generovanie množných čísel pri názvoch objektov a klikneme na finish.

Entity Framework v C# .NET - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

Zobrazí sa diagram našej databázy. Premenujeme si názvy referencií (Person1, Invoices1) nech sa v tom potom vyznáme.

Entity Framework v C# .NET - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

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.

Entity Framework v C# .NET - Databázy v C# - ADO.NET - Databázy v C# - ADO.NET

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 podmienkami

Stiahnuté 1936x (10.45 MB)

 

Všetky články v sekcii
Databázy v C# - ADO.NET
Článok pre vás napísal Petr Domes (petrds)
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programuji v .NET. Ovládám C#, .ASP, WF, WPF, SQL
Aktivity