Blazor wasm, net core hosted, с аутентификацией, отношения между пользователем приложения и моими моделями в общем проекте - PullRequest
1 голос
/ 19 июня 2020

Я изучаю Net Core и Blazor и сталкиваюсь со следующей проблемой.

Я создал новое решение для веб-сборки Blazor, net ядро ​​размещено с аутентификацией пользователя. По умолчанию решение разделено на три проекта: клиентский, серверный и общий. Я поместил свои модели в общий проект, но теперь мне нужно установить отношения (один-ко-многим, многие-ко-многим, ... как описано здесь: https://docs.microsoft.com/en-us/ef/core/modeling/relationships) между моими моделями и Модель ApplicationUser, которая живет внутри серверного проекта.

Внутри моей модели я не могу поместить

public ApplicationUser User { get; set; }

, потому что я не могу этого сделать

using mysolutionname.server;

, потому что серверный проект зависит от общего доступа, а общий доступ не может зависеть от сервера (циклическая зависимость).

Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Общий проект должен содержать только те объекты, которые используются совместно клиентским и серверным проектами. Например, класс WeatherForecast, используемый проектами клиента и сервера в шаблоне Visual Studio по умолчанию, находится в общем проекте, поскольку оба проекта используют этот класс. Но такие объекты, как ApplicationUser (или ApplicationDbContext), используются только на сервере, не должны и не могут использоваться в клиентском проекте, а их текущее местоположение, созданное шаблоном по умолчанию, не должно изменяться так, как вы думали.

Надеюсь, это поможет ...

1 голос
/ 19 июня 2020

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

В вашем случае не рекомендуется определять объекты данных в разных местах во всех популярных шаблонах программного обеспечения модель данных отделена от других компонентов.

Если ApplicationUser в основном является объектом базы данных, он должен находиться на уровне вашей базы данных, и приложение использует этот уровень базы данных.

Хранение этих слоев отдельно имеет много преимуществ. Просто чтобы назвать несколько примеров:

  • Вы можете поддерживать свои проекты отдельно, без их зависимости друг от друга. 1010 1016 *

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

...