Entity Framework DbContext с запросом

Возможно ли в среде Entitiy фильтровать наборы данных объекта при инициализации DbContext?

У меня следующая проблема: я хочу прочитать производственные данные из базы данных нашей системы ERP. Все наши отделы сохраняют свои данные в одной таблице, в которой есть поле для отдела, которому принадлежат данные. Сейчас я разрабатываю программное обеспечение только для одного конкретного отдела. Конечно, я мог прочитать все данные в DbSet, а затем запросить только наборы данных этого отдела в моем коде приложения, например так:

        Dim test As New DB.ModelProd()
        Dim cl As New List(Of DB.Charge)
        cl = test.Charges.ToList().Where(Function(ch) ch.Company = 3 And ch.ChargeId IsNot Nothing).ToList()
        'do something with cl

Но так как это приложение только для одного отдела, я не хочу читать и трогать данные других, которые я никогда не буду использовать. Также я хотел бы скрыть эту деталь от приложения, так как она подвержена ошибкам (не забудьте отфильтровать данные перед использованием и т. Д.).

Итак, как лучше это решить?

С наилучшими пожеланиями, Рональд

2 ответа

Там не "лучший" способ - но вот несколько вариантов:

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

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

Реализуйте IDbCommandTreeInterceptor и измените DbCommandTree, сгенерированный EF. Вы можете найти более подробную информацию о реальных шагах в следующем сообщении в блоге.

Другие вопросы по тегам