EF: не могу удалить зависимые таблицы одним скопом
От: Kingofastellarwar Украина  
Дата: 11.09.09 20:50
Оценка:
Есть простенькая база, OR/M — Entity Framework



Нужно: нажатием на кнопку очистить таблицы User, Access, Sheet, Staff

Если вызвать последовательно удаления во всех этих таблицах и завершить их SaveChanges
foreach(Sheet sheet in DAL.Sheet)
{
    DAL.DeleteObject(sheet);
}

foreach(Access access in DAL.Access)
{
    DAL.DeleteObject(access);
}

foreach(User user in DAL.User)
{
    DAL.DeleteObject(user);
}

foreach(Staff staff in DAL.Staff)
{
    DAL.DeleteObject(staff);
}
DAL.SaveChanges();

то получим такую ошибку:
An unhandled exception of type 'System.Data.UpdateException' occurred in System.Data.Entity.dll
Additional information: Entities in 'Sheet' participate in the 'FK_Sheet_Staff' relationship. 0 related 'Staff' were found. 1 'Staff' is expected.


Но! Если не трогать Staff, а очистить только User, Sheet, Access, то всё пройдёт хорошо, и если потом перезапустить приложние, то и Staff тоже следом удалится без проблем.
// при первом запске выполняем три этих цикла
foreach(Sheet sheet in DAL.Sheet)
{
    DAL.DeleteObject(sheet);
}

foreach(Access access in DAL.Access)
{
    DAL.DeleteObject(access);
}

foreach(User user in DAL.User)
{
    DAL.DeleteObject(user);
}
DAL.SaveChanges();

// а это - после перезагрузки
foreach(Staff staff in DAL.Staff)
{
    DAL.DeleteObject(staff);
}        
DAL.SaveChanges();


В тоже время вот такой вариант не работает
// всё без перезагрузок
foreach(Sheet sheet in DAL.Sheet)
{
    DAL.DeleteObject(sheet);
}

foreach(Access access in DAL.Access)
{
    DAL.DeleteObject(access);
}

foreach(User user in DAL.User)
{
    DAL.DeleteObject(user);
}
DAL.SaveChanges();

foreach(Staff staff in DAL.Staff)
{
    DAL.DeleteObject(staff);
}

DAL.SaveChanges();


Короче: не получается удалить энтити, которые ссылаются на уже удалённые энтити в одном scope.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: EF: не могу удалить зависимые таблицы одним скопом
От: yuriylsh  
Дата: 12.09.09 02:11
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>Короче: не получается удалить энтити, которые ссылаются на уже удалённые энтити в одном scope.


Я с EF не знаком пока еще, но чисто логически — нельзя ли сначала удалить что там в EF воплощает foreign key между entities, а потом уже удалять сами entities?
... << RSDN@Home 1.2.0 alpha 4 rev. 1228>>
Luck in life always exists in the form of an abstract class that cannot be instantiated directly and needs to be inherited by hard work and dedication.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.