Objektno-relaciono mapiranje

 

Baze kao što je SQL Server nazivaju se relacionim bazama podataka. Relacione baze podatke čuvaju u tabelama. C# kao objektno orijentisani programski jezik čuva objekte u memoriji. Objekti su komplikovaniji od tabela jer pored podataka sadrže i metode (kod). LINQ to SQL kreira objektno-relaciono mapiranje između tabela u bazi podataka i objekata u C# programu. Na slici je simbolički prikazano mapiranje tri tabele u bazi podataka u C# objekte.

  

Kreiranje LINQ to SQL klasa

Prvi korak u kreiranju LINQ to SQL klasa je instanciranje DataContext objekta za bazu kojoj se pristupa. Klase se kreiraju korišćenjem O/R dizajnera, i klase se smeštaju unutar dbml fajla. Objekat DataContext predstavlja most ka bazi podataka obezbeđujući metode za pristup bazi.

  

Dodavanje LINQ to SQL klase

 

Desnim tasterom miša klikne se na ikonicu projekta u Solution Exploreru i odabere se opcija Add New Item. U Add New Item prozoru odabere se šablon LINQ To Sql Classes. Potrebno je definisati ime fajla koji će sadržati ove klase. U primeru na slici ime fajla je Northwind.dbml.

  

Kreiranje konekcije na bazu

 

U prozoru Server Explorer treba kliknuti na dugme Connect to Database čime se otvara Add Connection prozor. U ovom prozoru treba odabrati izvor podataka, naziv servera, naziv baze podataka, kao i tip autentifikacije. U našem primeru uspostavlja se konekcija sa Northwind bazom podataka na lokalnom SQL Serveru korišćenjem windows autentifikacije.

  

Prikaz O/R dizajnera (dbml fajla)

 

Sada kada je uspostavljena konekcija sa bazom podataka, moguće je prevlačiti tabele u O/R dizajner tj. dbml fajl.

  

Dodavanje klase u DataContext

 

Prevlačenjem tabela na O/R dizajner vrši se dodavanje klasa koje odgovaraju tabelama u tipizirani DataContext objekat. Nakon prevlačenja tabela potrebno je iskompajlirati projekat da bi se izvršilo generisanje klasa.

  

Prikaz podataka iz baze

private void button1_Click(object sender, EventArgs e)
{
NorthwindDataContext northWindDataContext = new NorthwindDataContext();
var rezultatiUpita = from c in northWindDataContext.Customers
where c.Country == "USA"
select new
{
ID = c.CustomerID,
Ime = c.CompanyName,
Grad = c.City,
Region = c.Region,
};
foreach (var stavka in rezultatiUpita)
{
richTextBox1.AppendText(stavka.ToString() + " ");
}

} 

 

Unutar event handlera za klik događaj na dugme vrši se instanciranje tipiziranog DataContexta pod nazivom NorthwindDataContext. Objektu Customers unutar njega pristupamo korišćenjem operatora tačka. Sada podacima pristupamo korišćenjem LINQ izraza "from c in northWindDataContext.Customers".

  

Prikaz povezanih podataka

 

Sada ćemo iz Server Explora na DataContext dizajner da prevučemo i tabelu Orders. Time se unutar DataContext objekta kreira klasa Order koja je povezana sa klasom Customers posredstvom CustomerID atributa.

NorthwindDataContext northWindDataContext = new NorthwindDataContext();
var rezultatiUpita = from c in northWindDataContext.Customers
                     where c.Country == "USA"
                     select c;
  

 

foreach (var stavka in rezultatiUpita)

     string korisnik =String.Format("Korisnik: {0} {1}, {2}: Ukupno porudzbina {3} ",
     stavka.CompanyName, stavka.City, stavka.Region, stavka.Orders.Count);
     richTextBox1.AppendText(korisnik);
        foreach (Order o in stavka.Orders)
        {
            string porudzbina = String.Format(" {0} {1} ", o.OrderID, o.OrderDate);
            richTextBox1.AppendText(porudzbina);
        }
}
  

Unutar promenljive rezultatiUpita nalaze se podaci tj. skup objekata klase Customer koji predstavljaju redove iz tabele Customers koji imaju CustomerID atribut jednak "USA". Kroz ove redove tj. objekte prolazimo korišćenjem foreach petlje. Za svaki objekat Customer označen promenljivom stavka pronalazimo sve one Orders objekte koji su sa njim povezani korišćenjem operatora tačka tj. stavka.Orders. Kroz skup objekat tipa Order takođe prolazimo korišćenjem foreach petlje, a pojedinim atributima objekta pristupamo korišćenjem operatora tačka.

Dodaj komentar Sviđa mi se - (1) Ne sviđa mi se - (0)    

  • Tehnologija LINQ to SQL 1
  • Tehnologija LINQ to SQL 2
  • Tehnologija LINQ to SQL 3
  • Tehnologija LINQ to SQL 4