Есть простенькая база, 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 г.
Здравствуйте, 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.