Index: DOM/PM/Maatwerk/Syncs/DotNet/MaatwerkCalculator/impl/Halffabs.cls.xml =================================================================== diff -u -r66359 -r66360 --- DOM/PM/Maatwerk/Syncs/DotNet/MaatwerkCalculator/impl/Halffabs.cls.xml (.../Halffabs.cls.xml) (revision 66359) +++ DOM/PM/Maatwerk/Syncs/DotNet/MaatwerkCalculator/impl/Halffabs.cls.xml (.../Halffabs.cls.xml) (revision 66360) @@ -132,41 +132,67 @@ // afgeleide klasse. Zie o.a. // https://stackoverflow.com/questions/8599617/problems-using-tpt-table-per-type-in-ef-4-2-and-deletion-of-parent-objects #dim Statement As %String + #dim DeleteStatementAfgeleideKlasse As %String + #dim DeleteStatementTussenliggendeKlasse As %String + #dim DeleteStatementBasisKlasse As %String + #dim UpdateStatement As %String #dim TeVerwijderenIdsIterator As TECH.ResultSetIterator = ..GeefTeVerwijderenIds(UnId, Rolstukje, TypeCode) - Set Statement = "BEGIN TRAN;" + #dim BeginStatement As %String = "BEGIN TRAN;" + Set Statement = BeginStatement - // 1) Verwijderen van de oude versie. We doen hier 3 deletes omdat Entity Framework - // voor Table Per Type geen cascaded deletes configureert van het record voor de - // basisklasse naar het record van de afgeleide klasse. - Set Statement = Statement _ "DELETE s FROM " _ ..GeefRoltabelNaam(Rolstukje, TypeCode) _ " s "_ - "INNER JOIN " _ ..GeefBasistabelNaam() _ " b on s.Id = b.Id " _ - "WHERE b.Versie=0 AND b.GemaaktVoorKenmerkenSetID='" _ UnId _ "'; " + // 1) Verwijderen van de oude versie in alle tabellen. + Set DeleteStatementAfgeleideKlasse = "DELETE s FROM " _ ..GeefRoltabelNaam(Rolstukje, TypeCode) _ " s "_"INNER JOIN " _ ..GeefBasistabelNaam() + _ " b on s.Id = b.Id " _ "WHERE b.Versie=0 AND b.GemaaktVoorKenmerkenSetID='" _ UnId _ "'; " + + Set DeleteStatementTussenliggendeKlasse = ..GeefDeleteStatementTussenliggendeKlasse(TeVerwijderenIdsIterator, TypeCode) + Set DeleteStatementBasisKlasse = "DELETE FROM " _ ..GeefBasistabelNaam() _ + " WHERE Versie=0 AND GemaaktVoorKenmerkenSetID='" _ UnId _ "' AND MyDiscriminator LIKE '"_TypeCode_"%"_Rolstukje_"';" - If (TeVerwijderenIdsIterator.HasNext()) { - #dim Inhoud As %ResultSet = TeVerwijderenIdsIterator.Next() - #dim Id As %Integer = Inhoud.Data("Id") - Set Statement = Statement _ "DELETE FROM "_ ..GeefTussenliggendeTabelNaam(TypeCode) _" WHERE Id="_Id - } + Set Statement = Statement_DeleteStatementAfgeleideKlasse _ DeleteStatementTussenliggendeKlasse _ DeleteStatementBasisKlasse - While (TeVerwijderenIdsIterator.HasNext()) { - Set Inhoud = TeVerwijderenIdsIterator.Next() - Set Id = Inhoud.Data("Id") - Set Statement = Statement _ " OR Id="_Id - } - Set Statement = Statement _ ";" - - Set Statement = Statement _ "DELETE FROM " _ ..GeefBasistabelNaam() _ - " WHERE Versie=0 AND GemaaktVoorKenmerkenSetID='" _ UnId _ "' AND MyDiscriminator LIKE '"_TypeCode_"%"_Rolstukje_"';" // 2) Update de versie - Set Statement = Statement _ "UPDATE " _ ..GeefBasistabelNaam()_ - " set Versie=0 WHERE Versie=1 AND GemaaktVoorKenmerkenSetID='" _ UnId _ "'" - Set Statement = Statement _ "; COMMIT TRAN;" + Set UpdateStatement = "UPDATE " _ ..GeefBasistabelNaam()_ + " set Versie=0 WHERE Versie=1 AND GemaaktVoorKenmerkenSetID='" _ UnId _ "';" + Set Statement = Statement _ UpdateStatement + + #dim CommitStatement = "COMMIT TRAN;" + Set Statement = Statement _ CommitStatement Do ..VoeruitSql(Statement) ]]> + +1 +%String + + + + +TypeCode:%String +1 +%String + + + + +Rolstukje:%String,TypeCode:%String +1 +%String + + + + +1 +%TimeStamp + + + Halffab:DOM.PM.Maatwerk.Calc.HF.Halffab,Rolstukje:%String,TypeCode:%String,Klasse:%Dictionary.CompiledClass 1 @@ -252,36 +278,27 @@ ]]> - + +TeVerwijderenIdsIterator:TECH.ResultSetIterator,TypeCode:%String 1 -%String - - -TypeCode:%String -1 -%String - - - - -Rolstukje:%String,TypeCode:%String -1 -%String - - - - -1 -%TimeStamp - - - Statement:%String %ResultSet