Jak w C# wylaczc powiazania pomiedzy tabelami/klucze?

0

Mam 3 tabele szkolenia, uczestnicy, szkolenia_uczestnicy
Chce usunąć szkolenie i wszelkie dane z bazy o nim.
Zapytania sa pisane w LINQ/c#.

Ze wzgledu na relacje pomiedzy tabelami nie moge usunac informacji z zadnej tabeli.
Pytanie: Jak w C# wylaczc powiazania pomiedzy tabelami/klucze.

Przykład zapytania:

     var result1 = (
                                        from t in db.trainings
                                        join pt in db.participants_trainings
                                             on t.id_trainings equals pt.id_trainings
                                        join p in db.participants
                                            on pt.id_participants equals p.id_participants
                                        where t.id_trainings == Decimal.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString())
                                        select p).Take(1);

                        foreach (var p in result1)
                        { 
                            db.participants.DeleteOnSubmit(p);
                            db.SubmitChanges();
                        }

Próbowałem w poniższy sposób, lecz to nie działa:

db.ExecuteQuery<participants>("ALTER TABLE participants NOCHECK CONSTRAINT ALL");
1

Dlaczego nie możesz usunąć? Najpierw usuwasz rekord w 'szkolenia_uczestnicy' a potem powiązane. Przy podejściu z wyłączaniem sprawdzania kluczy, jak będziesz usuwał sporo szkoleń - może zdarzyć się że trakcie ktoś puści złe zapytanie do bazy i będzie miał niespójność po której włącznie sprawdzania kluczy będzie krzyczeć "pomusz ! błąd" :D

Dodatkowo... przy takiej strukturze jak piszesz- widzę że jeden user może brać udział w kilku szkoleniach, a samo szkolenie może mieć kilku userów, co za tym idzie.... jak usuwasz szkolenie - to wystarczy że usuniesz tylko rekord ze szkolenia - w tabeli szkolenia_uczestnicy rekord powinien mieć CASCADE w ON DELETE, więc powinien sam się skasować. W innym wypadku masz skopaną bazę - podeślij zrzut bazy - to przekonamy się.

0

Nie wiem dlaczego ale wczoraj miałem jakieś zaćmienie i uważałem, że nie moge usunąć danych z tabeli szkolenia_uczestnicy bo zaburzy to jakos strukture danych. Dlatego też chcialem rozłączać relacje miedzy tabelami.

Pan wyzej ma racje, można zaczac usuwanie od szkolenia_uczestnik.

//DEL PARTICIPANT_TRAININGS
                       var result2 = (
                                       from t in db.trainings
                                       join pt in db.participants_trainings
                                           on t.id_trainings equals pt.id_trainings
                                       where t.id_trainings == Decimal.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString())
                                       select pt).Take(1);

                   

                       foreach (var pt in result2)
                       {
                           db.participants_trainings.DeleteOnSubmit(pt);
                           db.SubmitChanges();
                       }

Pytanie tylko dlaczego takie zapytanie w linq sie nie wykonuje.
Bledu nie ma.
...cells[0] = kolejne id dla zaznaczonego wiersza

0

Może inaczej

Mam tabele:
--uczestnicy
id_uczestnika
--szkolenia
id_skzolenia
--szkolenia_uczestnicy
id_szkolenia
id_uczestnika

Znam tylko id_szkolenia, chce usunac wszelkie dane powiazane z szkoleniem

1.Usuwam z szkolenia uczestnicy
2.Usuwam z szkolenia
3? Jak usunac z uczestnicy

Problem tu jest z kolejnością usuniecia wszystkich danych

1 użytkowników online, w tym zalogowanych: 0, gości: 1