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();
}
}
}
}