Как заставить платформу сущностей работать с флагами архивов? - PullRequest
5 голосов
/ 25 марта 2010

Я пытаюсь создать набор таблиц, где мы на самом деле их не удаляем, а вместо этого устанавливаем флаги архива. Когда мы удаляем сущность, она не должна быть удалена, вместо этого она должна быть помечена как заархивированная.

Какие шаблоны программирования поддерживают это?

Я бы также предпочел не развертывать свои собственные хранимые процедуры для каждой таблицы, имеющей эти архивные флаги, если есть другое решение.

Ответы [ 4 ]

1 голос
/ 20 апреля 2015

Это старый вопрос, и он не указывает версию EntityFramework. Есть несколько хороших решений для более новых версий:

Entity Framework: Soft Soft легко удаляется

Шаблон мягкого удаления для кода Entity Framework First

Entity Framework 5 Soft Delete

Также есть источники для EF 6.1.1 +

Основные моменты выступления Роуэн Миллер на EF6 / EF7 на TechEd 2014

Entity Framework: создание приложений с Entity Framework 6

1 голос
/ 25 марта 2010
myEntity.IsArchived = true;
context.SaveChanges();

если ваши требования не удалять, не удаляйте; -)

0 голосов
/ 13 апреля 2010

Я не уверен насчет лучших практик, но вы можете попробовать написать свой собственный метод DeleteObject и поместить его в какой-нибудь класс (EFHelper - это имя класса, который я использую для такого рода вещей),Затем вместо вызова ObjectContext.DeleteObject вы вызываете EFHelper.DeleteObject и выполняете любую пользовательскую логику, которую хотите использовать в этом методе.Если вы согласны с тем, как называете эти свойства флага архива, вы можете использовать API отражения .NET, чтобы найти свойство archive_flag каждого объекта EntityObject, который вы «удаляете», и установить его соответствующим образом.

0 голосов
/ 25 марта 2010

Для этого вам придется написать собственную логику и избегать использования метода MarkForDeletion для этих объектов.

Ваша логика должна будет взять предоставленную сущность, каким-то образом изменить ее, чтобы указать, что она теперь "заархивирована", и затем сохранить изменения в контексте.

Затем вам нужно будет убедиться, что любой код, извлекаемый из БД, учитывает эти значения, обозначающие архивную запись.

Чтобы упростить его, вы можете создать частичные классы, соответствующие вашим классам сущностей, так что они имеют честь, скажем, пользовательский интерфейс. Таким образом, вы можете кодировать интерфейс и не использовать отражение для установки значений сущности.

Если вы можете использовать .NET 4.0, EF поддерживает POCO, и вы можете пометить сущности с помощью соответствующих интерфейсов, что сократит количество файлов, с которыми вам нужно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...