Hallo,
Na een tijdje kloten kom ik er toch niet uit, dus even hier vragen.
Allereerst mijn opzet:
Het liefste wil ik alles met elkaar Cascade hebben. Dus:
• Als ik een Dag verwijder, bijbehorende AanmeldingDagen ook weg (niet aanmeldingen!)
• Als ik een Aanmelding verwijder, bijbehorende AanmeldingDagen ook weg
• Als ik een Meeting verwijder, alles weg
Dat is helaas in strijd met de laatste, dan komen er meerdere Cascade paths en dan bokt MSSQL Server helaas.
Nu heb ik de cascade tussen Dag en AanmeldingDag weggelaten, en verwijder ik die handmatig:
Helaas krijg ik dan bij het opslaan de volgende melding:
Wat doe ik fout?
Na een tijdje kloten kom ik er toch niet uit, dus even hier vragen.
Allereerst mijn opzet:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| public class Meeting { public virtual ICollection<Dag> dagen {get;set;} public virtual ICollection<Aanmelding> aanmeldingen {get;set;} } public class Aanmelding { public virtual ICollection<AanmeldingDag> dagen {get;set;} public virtual Meeting meeting {get;set;} } public class Dag { public virtual Meeting meeting {get;set;} public virtual ICollection<AanmeldingDag> aanmeldingen {get;set;} } public class AanmeldingDag { public virtual Dag dag {get;set;} public virtual Aanmelding aanmelding {get;set;} } |
Het liefste wil ik alles met elkaar Cascade hebben. Dus:
• Als ik een Dag verwijder, bijbehorende AanmeldingDagen ook weg (niet aanmeldingen!)
• Als ik een Aanmelding verwijder, bijbehorende AanmeldingDagen ook weg
• Als ik een Meeting verwijder, alles weg
Dat is helaas in strijd met de laatste, dan komen er meerdere Cascade paths en dan bokt MSSQL Server helaas.
Nu heb ik de cascade tussen Dag en AanmeldingDag weggelaten, en verwijder ik die handmatig:
C#:
1
2
3
4
5
6
7
8
9
| foreach(var aanmelding in meeting.aanmeldingen) { foreach(var dag in aanmelding.dagen) { if(dag.dag.DagID == teverwijderendag.DagID) { aanmelding.dagen.Remove(dag); break; // anders een foutmelding dat de loop-collectie is veranderd, en er zitten geen dubbele dagen in een aanmelding } } } meeting.dagen.Remove(teverwijderendag); |
Helaas krijg ik dan bij het opslaan de volgende melding:
die in het engels dit zou moeten zijn:Een relatie uit de AssociationSet Meeting_dagen heeft de status Deleted. Gezien de multipliciteitsbeperkingen moet ook een overeenkomende Meeting_dagen_Target de status Deleted hebben.
Googlen naar die fout geeft wel resultaat, maar dan wordt meestal .Clear() gebruikt (dus als ik meeting.dagen.Clear() zou doen), wat niet zo is.A relationship from the 'Meeting_dagen' AssociationSet is in the 'Deleted' state. Given multiplicity constraints, a corresponding 'Meeting_dagen_Target' must also in the 'Deleted' state.
Wat doe ik fout?
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI