Я хотел бы реализовать функцию мягкого удаления в приложении, использующем E.F.6 с использованием метода first (.edmx). Следующие советы и рекомендации по ссылкам: link1 и link2 мне удалось сделать следующее:E.F.6, DB сначала, мягкое удаление - условие сопоставления вычисленного столбца
- Добавлена колонка IsDeleted на столе
- Добавлено вычисляемый столбец IsDeletedMapping на столе, который имеет такое же значение, как IsDeleted
- Добавлен интерфейс ISoftDelete, который будет реализован на объектах таблицы
Затем я добавил код для обработки Удалить действие для объектов в методе SqlRepository Delete.
// if has ISoftDelete interface perform soft delete.
if (typeof (ISoftDelete).IsAssignableFrom(typeof (T)))
{
entry.State = EntityState.Modified;
var tempEntry = entry.Entity as ISoftDelete;
tempEntry.IsDeleted = true;
}
// else, mark entity state as Deleted
else
{
entry.State = EntityState.Deleted;
}
Это означает, что объекты, которые реализуют интерфейс ISoftDelete будет вместо быть удален в БД, просто обновляется с IsDeleted = True. Также значение IsDeletedMapping будет установлено в true, поскольку оно вычисляется из IsDeleted.
Проблема, с которой я столкнулся, заключается в том, как фильтровать IsDeleted = false в запросах EF.
То, что я пробовал, - это отображение условий на IsDeletedMapping, так как это означает, что EF будет автоматически фильтровать это для нас.
Condition mapping of IsDeletedMapping
Но здесь кроется проблема. IsDeletedMapping имеет StoreGeneratedPattern свойство установлено в Вычисляется и поэтому я получаю сообщение об ошибке:
Error 2016: Condition cannot be specified for Column member 'IsDeletedMapping' because it is marked with a 'Computed' or 'Identity' StoreGeneratedPattern.
Таким образом, вопрос: Есть ли обходной путь, чтобы установить условие отображение на вычисляемый столбец? Также, если у вас есть лучший подход к реализации мягкого удаления, я буду более счастлив попробовать его. Имейте в виду, что реализация должна автоматически фильтровать мягкие удаленные записи.
Спасибо за ваши ответы!
Я бы настоятельно рекомендовал вывести эту логику из сущностей, которые вы привязаны к БД, и сохранить их в своем DAO-слое - переопределить репозиторий. Удалить работу или что-то в этом роде. Мессинг с вычисленными свойствами в EF довольно рискован и неосуществлен из моего опыта –