Ik heb alweer een probleem met NHibernate 
Ik kan nu wel (nieuwe) 'container' objecten en hun items saven in de databank (klik), maar het updaten lukt blijkbaar niet...
Als ik op deze manier een nieuw item in de DB wil opslaan, dan gaat dat zonder problemen.
Hier zie ik mbhv SQL profiler dat er 2 insert queries uitgevoerd worden, en de 2 objecten staan ook correct in de DB.
Ik kan ze ook ophalen mbhv nhibernate.
Echter, het probleem doet 'm nu voor als ik een bestaand object uit de DB haal, en deze wil wijzigen en opslaan.
Ik heb als test een scherm gemaakt, waarin al m'n containers in een listview getoond worden. Deze lijst heb ik gewoon quick'n dirty opgehaald, door rechtstreeks met een data-reader te werken.
Als ik een item selecteer, dan haal ik het 'container' object op dmv hibernate, en toon het de container in een 'detail-scherm': ik toon z'n naam in een TextBox, en de Items die in deze container zitten in een ListView.
Als ik op de 'OK' button klik op dat detail scherm, dan wil ik dat de wijzigingen opgeslagen worden.
Even wat relevante code:
In de double-click event op de ListView van het 'overzichtsscherm' staat deze code:
De Execute(Container c) method van frmContainerDetail is gewoon een method die er zo uit ziet:
Nu heb ik dus de 'OK button', waarmee ik de wijzingen die op de form zijn gebeurd wil opslaan:
Als deze code uitgevoerd wordt, wordt er dus niets ge-updated. Als ik in de profiler ga kijken, zie ik ook geen insert/update statements voorbij vliegen.
Ik heb dan maar ff m'n code in de btnOk-click vervangen door dit:
maar ook hier wordt er niets geupdated, terwijl ik toch wel zou verwachten dat het hier wel gebeurd. Hier haal ik nl. het 'originele' object uit de DB, wijzig het en update het binnen dezelfde sessie ?
Ik dacht nl dat m'n eerste test niet lukte omdat het object gesaved werd binnen een andere sessie dan de sessie waarin het opgehaald werd, maar blijkbaar is er toch nog wat anders a/d hand ?
Ik kan nu wel (nieuwe) 'container' objecten en hun items saven in de databank (klik), maar het updaten lukt blijkbaar niet...
Als ik op deze manier een nieuw item in de DB wil opslaan, dan gaat dat zonder problemen.
code:
1
2
3
4
5
6
7
8
9
10
| Container c = new Container(); c.Name = "bliep"; Item it = new Item(); it.Name = "item1"; it.Price = 12; c.AddItem(it); ISession s = sessFact.OpenSession(); s.Save (c); s.Close(); |
Hier zie ik mbhv SQL profiler dat er 2 insert queries uitgevoerd worden, en de 2 objecten staan ook correct in de DB.
Ik kan ze ook ophalen mbhv nhibernate.
Echter, het probleem doet 'm nu voor als ik een bestaand object uit de DB haal, en deze wil wijzigen en opslaan.
Ik heb als test een scherm gemaakt, waarin al m'n containers in een listview getoond worden. Deze lijst heb ik gewoon quick'n dirty opgehaald, door rechtstreeks met een data-reader te werken.
Als ik een item selecteer, dan haal ik het 'container' object op dmv hibernate, en toon het de container in een 'detail-scherm': ik toon z'n naam in een TextBox, en de Items die in deze container zitten in een ListView.
Als ik op de 'OK' button klik op dat detail scherm, dan wil ik dat de wijzigingen opgeslagen worden.
Even wat relevante code:
In de double-click event op de ListView van het 'overzichtsscherm' staat deze code:
code:
1
2
3
4
5
6
| ISession s = sessFact.OpenSession(); Container c = (TestModel.Container)s.Get(typeof(TestModel.Container), listView1.SelectedItems[0].Tag); s.Close(); frmContainerDetail f = new frmContainerDetail(); f.Execute (c); |
De Execute(Container c) method van frmContainerDetail is gewoon een method die er zo uit ziet:
code:
1
2
3
4
5
| void Execute( Container c )
{
_container = c;
textBox1.Text = c.Name;
} |
Nu heb ik dus de 'OK button', waarmee ik de wijzingen die op de form zijn gebeurd wil opslaan:
code:
1
2
3
4
5
6
7
8
| public void btnOk_Click(object sender, EventArgs e )
{
_container.Name = textBox1.Text;
ISession s = sessFact.OpenSession();
s.SaveOrUpdate (_container);
s.Close();
} |
Als deze code uitgevoerd wordt, wordt er dus niets ge-updated. Als ik in de profiler ga kijken, zie ik ook geen insert/update statements voorbij vliegen.
Ik heb dan maar ff m'n code in de btnOk-click vervangen door dit:
code:
1
2
3
4
5
| ISession s = sessFact.OpenSession(); _container = (Container)s.Get(typeof(Container), _container.Id); _container.Name = textBox1.Text; s.SaveOrUpdate (_container); s.Close(); |
maar ook hier wordt er niets geupdated, terwijl ik toch wel zou verwachten dat het hier wel gebeurd. Hier haal ik nl. het 'originele' object uit de DB, wijzig het en update het binnen dezelfde sessie ?
Ik dacht nl dat m'n eerste test niet lukte omdat het object gesaved werd binnen een andere sessie dan de sessie waarin het opgehaald werd, maar blijkbaar is er toch nog wat anders a/d hand ?
[ Voor 4% gewijzigd door whoami op 13-11-2005 12:10 ]
https://fgheysels.github.io/