У нас есть модель данных, которая имеет некоторые требования. Я хотел бы найти способ сделать эти требования максимально прозрачными при использовании EF.
Во-первых, модель должна поддерживать мягкое удаление. Я видел несколько вопросов по этому поводу, и я думаю, что это будет относительно просто.
Во-вторых, у нас есть политика «только вставка». Это означает, что нет обновлений. Когда обновление сделано, новая запись должна быть вставлена взамен. Я хотел бы иметь возможность обрабатывать операцию как обновление, и сделать так, чтобы фреймворк заменил ее вставкой за кулисы.
В-третьих, из-за # 2, когда мы запрашиваем, нам нужно упорядочить, опустившись на столбец идентификаторов и вернув только первую запись. Даже при выполнении запроса, который возвращает много записей. По сути, это создает историю версий.
В-четвертых, мы не хотим реализовывать эту логику в каждом запросе. Было бы неплохо, чтобы инфраструктура сделала это для нас, чтобы мы могли обрабатывать каждый запрос, как если бы это была обычная транзакция типа CRUD.
Кто-нибудь реализовывал такую модель данных в EF? Какие техники вы использовали?
Мне известно, что это можно сделать в представлениях и / или Sprocs, но если вы используете представления, вам придется поддерживать все отношения вручную (EF не может прочитать отношения через представления). Триггеры также возможны, но наши администраторы баз данных хотят иметь как можно меньше триггеров и имеют очень обширную политику проверки всех триггеров, выполнение которой занимает много времени. Я бы предпочел не использовать триггер, если мне не нужно.
Я работаю в основном с базой данных, но я использую dbcontext.
EDIT:
Учитывая комментарии Ладислава ниже, мне также будут интересны любые комментарии о других ORM, которые могут удовлетворить эти требования.