Создание пользовательской модели для EF Core - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть модель, которую я хочу загрузить один из ее столбцов из источника, отличного от базы данных EF Core, например MongoDb.

Проблема в том, что я не могу понять, как переопределить выполнение запроса в EF Core. Для сохранения это нормально, потому что EF Core позволяет нам переопределять SaveChanges и делать наши собственные логики c.

Для части чтения я решил лениво загрузить столбец через его метод доступа геттера. Цель состоит в том, чтобы как можно меньше изменений в нашем коде (у нас есть много проектов, которые используют EF Core для загрузки объекта, и я не хочу изменять код таким образом, чтобы нарушать все запросы этого указанного c объекта ).

Но как внедрить мой сервис MongoDb в мою модель? Для ASP. Net Core мы можем создать пользовательский механизм связывания модели, но для EF Core, как создать собственный механизм связывания модели или создатель модели для внедрения сервисов в модель? Могу ли я использовать инжекторы зависимостей, такие как Ninject или AutoFa c (я только что слышал о них и не имел никакого опыта с ними)? Они работают с EF Core?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

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

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

Ваш дизайн в корне сломан. EF Core - это ORM для реляционных баз данных, и, в частности, он может работать только с одной базой данных на контекст. Составление из нескольких источников данных - это не , то, что вы должны делать через код EF Core, а скорее через некоторый класс обслуживания, который внутренне использует EF Core и драйвер MongoDB. Код вашего приложения должен затем использовать эту службу, а не EF Core напрямую. Это 100% неправильный подход к попытке взломать это в вашем коде контекста.

...