Blazor wasm,网络核心托管,具有身份验证,应用程序用户与共享项目中我的模型之间的关系

Blazor wasm, net core hosted, with authentication, relationships between applicationuser and my models in the shared project

我正在研究 Net Core 和 Blazor,我遇到了以下问题。

我创建了一个新的 Blazor Web 程序集解决方案,net core 托管了用户身份验证。该解决方案默认分为三个项目:客户端、服务器和共享。我将我的模型放在共享项目中,但现在我需要在我的模型和存在的 ApplicationUser 模型之间设置关系(一对多,多对多,......如此处所述:https://docs.microsoft.com/en-us/ef/core/modeling/relationships)在服务器项目中。

我无法在我的模型中放置

public ApplicationUser User { get; set; }

因为我做不到

using mysolutionname.server;

因为server项目依赖shared而shared不能依赖server(循环依赖)

我该如何解决?

如果您遇到循环依赖问题,这主要意味着您的应用程序架构存在问题。

在您的情况下,在不同位置定义数据对象不是一个好的做法,在所有流行的软件模式中,数据模型都与其他组件分开。

如果 ApplicationUser 基本上是一个数据库对象,它需要存在于您的数据库层中并且应用程序使用该数据库层。

将这些图层分开保存有很多好处。举几个例子:

  • 您可以单独维护您的项目,而不需要它们相互依赖。
  • 没有循环依赖
  • 您可以共享模型而不共享其他部分
  • 如果对数据库层进行了一些更改,您可以在一个中心位置进行更改。

如果您需要来自另一个库的子应用程序用户,您应该在数据库层中引用该库。

共享项目应该只包含客户端和服务器项目共享的对象。例如,客户端和服务器项目在默认 Visual Studio 模板中使用的 WeatherForecast class 驻留在共享项目中,因为两个项目都使用此 class。但是诸如ApplicationUser(或ApplicationDbContext)之类的对象只能在服务器上使用,不能也不能在客户端项目上使用,并且它们由默认模板生成的当前位置不应按照您的想法进行更改。

希望这对您有所帮助...