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

时间:2020-06-19 12:01:31

标签: c# blazor blazor-client-side

我正在研究Net Core和Blazor,并且面临以下问题。

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

我无法放入模型

public ApplicationUser User { get; set; }

因为我不能这样做

using mysolutionname.server;

因为服务器项目依赖于共享并且共享不能依赖于服务器(循环依赖)。

我该如何解决?

2 个答案:

答案 0 :(得分:2)

Shared项目应仅包含由Client和Server项目共享的对象。例如,默认Visual Studio模板中的Client和Server项目使用的WeatherForecast类驻留在Shared项目中,因为两个项目都使用该类。但是,诸如ApplicationUser(或ApplicationDbContext)之类的对象仅在服务器上使用,不能并且不能在Client项目上使用,并且默认模板产生的对象的当前位置不应以您认为的方式更改。

希望这对您有帮助...

答案 1 :(得分:0)

如果遇到循环依赖问题,则通常意味着您的应用程序体系结构中存在某些问题。

对于您来说,在不同位置定义数据对象不是一个好习惯,在所有流行的软件模式中,数据模型都与其他组件分开。

如果ApplicationUser本质上是一个数据库对象,则它必须位于您的数据库层中,并且应用程序使用该数据库层。

单独保留这些层有很多好处。仅举一些例子:

  • 您可以单独维护项目,而无需彼此依赖。
  • 没有循环依赖项
  • 您可以共享模型而无需共享其他部分
  • 如果数据库层有一些更改,则可以在一个中央位置进行更改。

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