Что ж, самое простое решение - это сначала пройтись по ценам и сохранить изменения вызовов, затем установить запись для delete для deleteMe и снова сохранить изменения вызовов, но вы проверили это: каскад ? Кажется, это то, что вы хотите.
Интересно, почему вы просто не удаляете сущности из контекста для удаления, а устанавливаете состояние входа?
Другой вариант - установить каскадное удаление http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx
Сделайте что-то подобное (не проверено, но, надеюсь, вы получите jist):
using (TransactionScope scope = new TransactionScope())
{
foreach (var deleteMe in deleteThese)
{
// Delete validation
if(CanDeleteItem(deleteMe.ItemId))
{
foreach (var item in deleteMe.Prices)
{
db.Entry(item).State = EntityState.Deleted; // cascade delete
}
db.SaveChanges();
db.Entry(deleteMe).State = EntityState.Deleted;
}
}
db.SaveChanges();
scope.Complete();
}
Дополнительно вы можете позвонить:
db.Prices.Remove(item);
и
db.DeleteMes.Remove(deleteMe);
вместо установки состояния входа. Не уверен, что между этими двумя сценами есть разница.