[ Mikelly @ 06.10.2007. 14:11 ] @
Imam jedan tipiziran dataset sa 4 povezane tabele. U konkretnom primjeru koristim dvije tabele (master i slave). Za pristup podacima koristim table adaptere.

Problem se javlja prilikom update-a. Naime, kad update-ujem stare podatke nema problema, ali kad unesem novi zapis u master tabelu i nekolika zapisa u slave tabelu prijavi gresku sql servera.

Ja uradim sledece:
this.kalktableadapter.update(kalkdataset.kalk);
this.datatableadapter.update.(kalkdataset.data);

Prijavljuje kao da ne postoji foreign_key u master tabeli i zato sql server odbija da upise podatke.

Ako dodam novi zapis u master tabelu i odmah odradim update pa tek onda dodajem zapise u slave tabelu nema greske, ali kada prirodno dodajem podatke uvijek prijavljuje ovu gresku.

E sad, da li ja moram prije svakog ubaciavanja slave podataka prvo master podatke upisivati u bazu (ovo mi zvuci bzvz) ili ima neko rjesenje ili ja pravim neki previd...

Pozdrav.
[ bjevta @ 06.10.2007. 16:40 ] @
U slučaju kada treba snimiti više povezanih tabela, predlažem ručno baratanje adapterima. Ako se dobro sećam, redosled insert/update/delete operacija koji je MS predvideo po default-u i nije baš najlogičniji. Cenim da bi najpraktičnije bilo prvo odraditi delete, zatim update, pa na kraju insert.

Operaciju brisanja treba sprovoditi od tabela na dnu hijerarhije (detail u master/detail konceptu), kod update-a treba voditi računa da li je relacija u bazi sa kaskadnim update-om (obično jeste) da se ne bi javio "concurency violence exception" (zaboravih kako se tačno zove), dok je insert najbolje započeti od master tabele.

Dakle, redosled operacija:
1.a delete detail
1.b delete master
2.a update master
2.b update detail
3.a insert master
3.b insert detail