Удаленное использование и DI для DbContext в EF Core (3.0)

Я хочу изолировать «ядро» базы данных как службу на изолированном компьютере и получить доступ через TCP / IP или другой уровень соединения от других служб, которым необходимы данные из базы данных (подключение к удаленной базе данных). В службе базы данных я хочу создать dbcontext в памяти, который заменяет запросы dbcontext базы данных с помощью DI.

Может ли кто-нибудь объяснить мне лучший и правильный способ сделать это? Возможно, есть какие-то проекты на github или эту функциональность можно найти в EF Core (3.0) «из коробки»?

Спасибо.


person Dmitriy    schedule 23.07.2019    source источник


Ответы (1)


Остальная часть вашего вопроса была понятной (хотя и широкой), но вы потеряли меня с:

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

Вы, безусловно, можете создать службу HTTP, чтобы использовать ее для сохранения вместо прямого использования DbContext. В основном это и есть микросервисы. Однако вам нужно будет взаимодействовать с этой службой через клиент. В случае службы HTTP или API, как его чаще называют, этим клиентом будет HttpClient. Похоже, вы хотите как-то по-прежнему использовать DbContext, но пусть он взаимодействует с этой службой под капотом. Это невозможно.

Насколько "из коробки" идет. На самом деле здесь нет ничего, поскольку каждый источник данных и, следовательно, микросервис разные. Самое близкое, что вы можете получить, - это OData или GraphQL. Оба потребуют некоторой степени конфигурации, поэтому они все еще не "из коробки", но любой из них позволит вам выдавать запросы, похожие на запросы, к конечной точке, что означает, что вам не обязательно нужно проектировать множество разных конечных точек. для обработки различных типов запросов или операций.

person Chris Pratt    schedule 23.07.2019
comment
В службе базы данных я хочу создать dbcontext в памяти, который заменяет запросы dbcontext базы данных с помощью DI - я имею в виду, что я хочу использовать один и тот же производный класс DbContext для двух экземпляров, один хранит данные в базе данных памяти, другой хранит данные в базе данных на диске из первой базы данных по расписанию. База данных в памяти - это кеш с настраиваемой логикой, которую я хочу описать сам. - person Dmitriy; 23.07.2019
comment
Итак, как лучше всего реализовать клиента - через MVC-контроллер или gRPC? - person Dmitriy; 23.07.2019
comment
Нет лучшего способа. Это то, что лучше всего подходит вам, вашей команде, вашей организации и вашему приложению. Никто не может позвонить за вас. Изучите различные методы и примите решение. - person Chris Pratt; 23.07.2019
comment
Что ж, как я уже сказал, это теоретически похоже на архитектуру микросервисов, так что это в основном ваш шаблон проектирования, но есть буквально миллионы способов, которые могут быть выполнены с любым количеством комбинаций внутреннего хранилища, поставщиков, фреймворков, библиотек, протоколов, сетевых компонентов. , так далее. - person Chris Pratt; 23.07.2019