using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Transactions; // lisättävä referencesiin using System.Data.SqlClient; using System.Data; namespace entity { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { entity.tietokannat2Entities tietokannat2Entities; System.Windows.Data.CollectionViewSource reseptiViewSource; System.Data.Objects.ObjectQuery reseptiQuery; public MainWindow() { InitializeComponent(); } private System.Data.Objects.ObjectQuery GetReseptiQuery(tietokannat2Entities tietokannat2Entities) { // Auto generated code System.Data.Objects.ObjectQuery reseptiQuery = tietokannat2Entities.Resepti; // To explicitly load data, you may need to add Include methods like below: // reseptiQuery = reseptiQuery.Include("Resepti.Ruokalaji"). // For more information, please see http://go.microsoft.com/fwlink/?LinkId=157380 // Update the query to include Ohje data in Resepti. You can modify this code as needed. reseptiQuery = reseptiQuery.Include("Ohje"); // Returns an ObjectQuery. return reseptiQuery; } private void Window_Loaded(object sender, RoutedEventArgs e) { tietokannat2Entities = new entity.tietokannat2Entities(); // Load data into Resepti. You can modify this code as needed. reseptiViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("reseptiViewSource"))); reseptiQuery = this.GetReseptiQuery(tietokannat2Entities); reseptiViewSource.Source = reseptiQuery.Execute(System.Data.Objects.MergeOption.AppendOnly); } private void buttonPrev_Click(object sender, RoutedEventArgs e) { reseptiViewSource.View.MoveCurrentToPrevious(); } private void buttonNext_Click(object sender, RoutedEventArgs e) { reseptiViewSource.View.MoveCurrentToNext(); } private void buttonUusi_Click(object sender, RoutedEventArgs e) { Resepti uusiresepti = new Resepti { Nimi = "Hernekeitto", Henkilomaara = 4, Kuvaus = "perusherkku", RuokalajiID = 1, // tätä ei käytetä mutta on silti pakko olla!? Näyttää toimivan sittenkin eli kanta generoi itse reseptiID:lle arvon // ReseptiID = 10 }; // voidaan lisätä liittyvät objektit suoraan oliomallin kautta Ohje uusiohje = new Ohje(); uusiohje.Vaihenro = 1; uusiohje.Ohjeteksti = "sotke kaikki kattilaan"; uusiresepti.Ohje.Add( uusiohje ); Ohje uusiohje2 = new Ohje(); uusiohje2.Vaihenro = 2; uusiohje2.Ohjeteksti = "Lämmitä"; uusiresepti.Ohje.Add(uusiohje2); tietokannat2Entities.Resepti.AddObject(uusiresepti); tietokannat2Entities.SaveChanges(); // päivittää gridin ajantasalle reseptiViewSource.Source = reseptiQuery.Execute(System.Data.Objects.MergeOption.AppendOnly); reseptiViewSource.View.MoveCurrentToLast(); } private void buttonPoista_Click(object sender, RoutedEventArgs e) { // poistetaan malliksi resepti // pitää tehdä transaktiolla siltä varalta, että jotain menee pieleen kesken poistelun // poistetaan ensimmäiseksi reseptiin liittyvät viittaukset ohje- ja liittyy-tauluista ja vasta sen jälkeen resepti using (TransactionScope scope = new TransactionScope()) { Resepti r = (Resepti)reseptiViewSource.View.CurrentItem; List ohjeet = r.Ohje.ToList(); for (int i = (ohjeet.Count-1); i >= 0; i--) { tietokannat2Entities.DeleteObject(ohjeet[i]); } List liittyy = r.Liittyy.ToList(); for (int i = (liittyy.Count - 1); i >= 0; i--) { tietokannat2Entities.DeleteObject(liittyy[i]); } /* // myös seuraava tapa toimii eli kaivelee käyttöliittymästä poistettavat objektit // r.ReseptiID for (int i = (ohjeDataGrid.Items.Count - 1); i >= 0; i--) { Ohje apu = ohjeDataGrid.Items[i] as Ohje; if (apu != null) { tietokannat2Entities.DeleteObject(apu); } }*/ // voidaan käyttää myös LINQ-kieltä ja tehdä kyselyjä tietokantaan /* IQueryable liittyy = from Liittyy in tietokannat2Entities.Liittyy where Liittyy.Resepti_ReseptiID == r.ReseptiID select Liittyy; List liittyylist = liittyy.ToList(); for (int i = 0; i < liittyylist.Count; i++) { tietokannat2Entities.DeleteObject( liittyylist[i]) ; } */ // ei välttämättä tarpeellinen: tietokannat2Entities.SaveChanges(); tietokannat2Entities.DeleteObject(r); tietokannat2Entities.SaveChanges(); scope.Complete(); } } private void buttonTallenna_Click(object sender, RoutedEventArgs e) { // tekee varsinaisen tallentamisen tietokantaan! // käyttöliittymässä tehdyt muutokset eivät päivity ilman tätä tietokannat2Entities.SaveChanges(); } private void buttonMuuta_Click(object sender, RoutedEventArgs e) { using (TransactionScope scope = new TransactionScope()) { Resepti r = (Resepti)reseptiViewSource.View.CurrentItem; r.Nimi = "Muutettu nimi"; for (int i = (ohjeDataGrid.Items.Count - 1); i >= 0; i--) { Ohje apu = ohjeDataGrid.Items[i] as Ohje; if (apu != null) { apu.Ohjeteksti = "Päivitetty teksti!"; } } IQueryable liittyy = from Liittyy in tietokannat2Entities.Liittyy where Liittyy.Resepti_ReseptiID == r.ReseptiID select Liittyy; List liittyylist = liittyy.ToList(); for (int i = 0; i < liittyylist.Count; i++) { liittyylist[i].Maara = 10; // kaikkiin aineisiin määräksi 10 } tietokannat2Entities.SaveChanges(); scope.Complete(); } } } }