Разделение DbContexts таблиц идентификаторов и бизнес-таблиц при совместном использовании внешнего ключа

Я использую IdentityServer в качестве сервера авторизации для моего API. Это отдельный ASP.NET Core Identity + IdentityServer4 проект, который обрабатывает логин пользователя / войти / зарегистрироваться/и т.д. Мой API’ buisness ‘ находится в отдельном ASP.NET основной проект Web API.

Я использую миграции ядра Entity Framework с первым кодом для создания таблиц базы данных для обоих этих проектов.

Проект Auth Server, как и следовало ожидать, содержит все пользовательские таблицы идентификаторов по умолчанию ApplicationDbContext(DbContext идентификаторов по умолчанию).

Однако сервер API buisness должен иметь свои собственные таблицы. Большинство этих таблиц должны иметь UserIdвнешний ключ (например. в приложении todo API будет иметь таблицу элементов todo, в которой пользователи и элементы todo имеют отношение один ко многим FK). Это означает, что у сервера API есть собственные DbContexts, которые я определил, с большинством Dbset, имеющих внешние отношения ключа к пользователям (ApplicationUser).

Как бы я это устроил? Ядро EF не поддерживает отношения FK между несколькими DbContexts. Кроме того, при этом вам придется вводить классы контекста дважды (один раз для каждого проекта), что требует дублирования строки подключения. Я знаю, что могу просто позволить моему проекту Auth Server также обрабатывать мои бизнес-таблицы (так же легко, как добавлять больше Dbset), но я хотел бы держать их отдельно. Есть ли чистый, идиоматический способ сделать это или я думаю об этом неправильно?

1 ответ

  1. Я делаю это, чтобы добавить пользовательскую таблицу в бизнес-DbContext, который имеет строку, вставленную, когда пользователь зарегистрирован в Identity DbContext. Эта пользовательская строка имеет ссылку на идентификатор, созданный в Indentity DbContext, но используется в качестве внешнего ключа, поскольку он находится в том же DbContext с другими таблицами в Business DbContext.