C# ADO.NET каскадное удаление записей
От: Nike85  
Дата: 18.01.08 10:51
Оценка:
Здравствуйте!

Пишу первое приложение на C#. Появилась загвоздка при удалении записи из БД.
Структура БД — таблица Machines (машины) и таблица Services (обслуживания).
Machines:
ID — уникальный ключ
Name — название


Services
ID — уникальный ключ
Date — дата
Description — описание
IDMachine — код машины

Таблицы связаны — Machines.ID -> Services.IDMachine (один ко многим). Хочу, чтобы при удалении записи из Machines автоматом удалялись и дочерние записи в Services. Уже перепробовал разные варианты, однако добиться каскадного удаления не получается.
Ниже код реализации:



....
// подготовка данных
            eLibraDataSet.Relations.Add("Machines_Services", eLibraDataSet.Machines.IDColumn,
                eLibraDataSet.Services.IDMachineColumn,false);
           
            fkc = new ForeignKeyConstraint("Machines_ServicesFK",
                eLibraDataSet.Machines.IDColumn, eLibraDataSet.Services.IDMachineColumn);
            fkc.DeleteRule = Rule.Cascade;
            fkc.UpdateRule = Rule.SetNull;
            eLibraDataSet.Machines.Constraints.Add(fkc);
            eLibraDataSet.EnforceConstraints = false; //это ограничение включаю непосредственно перед удалением, поэтому пока отключаю его

            machinesTableAdapter.Fill(eLibraDataSet.Machines);
            servicesTableAdapter.Fill(eLibraDataSet.Services);
....
// непоcредственно удаление

                    eLibraDataSet.EnforceConstraints = true;
                    machinesTableAdapter.Delete(0);  //удаляю первую запись в главной таблице, для нее есть записи в подчиненной
                    eLibraDataSet.EnforceConstraints = false;
                    machinesTableAdapter.Update(eLibraDataSet.Machines); // но после обновления в подчиненной записи остаются на месте
                    servicesTableAdapter.Update(eLibraDataSet.Services);
                    machinesTableAdapter.Fill(eLibraDataSet.Machines);
                    servicesTableAdapter.Fill(eLibraDataSet.Services);
...


Не выходит у меня таким образом каскадно удалять записи. Из главной таблицы удаляется запись, а подчиненные записи остаются.
Может кто-нибудь подскажет, каким образом надо организовать это удаление?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.