0

Моя бизнес-логика и основные сущности тесно связаны.Идентифицируемые объекты в Entity Framework Code First

  • Объект, например, называется Session, является сущностью базы данных, но в буквальном выражении слова представляет собой сеанс реальной жизни, в течение которого записываются события.
  • Этот объект Session также имеет объекты [NotMapped] и обрабатывает неуправляемые ресурсы.
  • Объект Session также реализует IDisposable.
  • Хороший кусок сущностей в моем проекте имеет вышеуказанные характеристики.

Это звучит как катастрофа по линии. Вопрос в том, какой подход принять здесь.

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

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

Не знаете, как достичь этого в устойчивом режиме.

+0

Плотно соединенный будет быстро приближающейся катастрофой ... –

ответ

1

Речь идет не о дизайне, а о собственности на одноразовые объекты. Кто владеет организацией? Владелец несет ответственность за удаление. Это то, что определяется вашим кодом/дизайном.

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

+0

Переопределение 'Dispose' является хорошим указателем, спасибо. В моем случае, однако, мои классы сущностей имеют ссылки на такие вещи, как приложения для взаимодействия с офисами. Как вы можете себе представить, конструктор, инициализатор и деструкторы вызовут эти ссылки. Проблема заключается в том, что эти ссылки должны быть доступны только на стороне клиента. Таким образом, вопрос: как я должен это переосмыслить. –

+0

Развязывая объекты и неуправляемые ресурсы. –

+0

Я хотел спросить, как его структурировать. Создавать унаследованные бизнес-объекты против каждого такого объекта? Использовать композицию? Другая известная техника? –