【问题标题】:Blazor WASM with EF Core: Where to put data model code?带有 EF Core 的 Blazor WASM:将数据模型代码放在哪里?
【发布时间】:2021-05-24 13:03:42
【问题描述】:

使用 Blazor WebAssembly 时,默认情况下会创建三个项目 - 客户端、服务器和共享。 哪个项目是定义 EF Core 数据模型的代码的最佳选择?

  • 如果我把它放在服务器中,我必须在客户端项目中创建它的客户端对应项,这会创建冗余代码
  • 如果我把它放在 Shared 中并使用 Data Annotations,客户端会变得传递依赖 EF Core ????
  • 如果我将其放入 Shared 并使用 Fluent API,我将不得不检查多个文件以了解单个属性(例如,此属性是否必需?它的最大长度是多少?)

似乎我选择了三害中的较小者,这似乎是 Fluent API。 还有其他我没有考虑到的方面吗?

【问题讨论】:

  • 实际上,并不是您想要共享的所有数据模型。在这种情况下,您将在两个不同的位置拥有模型。虽然将共享文件夹用于数据模型似乎很有吸引力,但我发现它仅对 POC 有用。数据注释是有限的。访问共享 dll 中的模型构建器会导致客户端膨胀。
  • 您真的希望将您的数据库设计放在一个交付给客户端的 DLL 中吗?

标签: c# entity-framework blazor


【解决方案1】:

您将 DTO(数据传输对象)放在共享项目中。这是 Blazor 的主要优势之一。

您可以将模型实体用作 DTO,但我只会将其用于(非常)小型项目。然后在服务器上仍然只需要 EF(DbContext 和 Fluent API)。不要将其添加到共享项目中。

对于较大的项目,使用单独的 DTO 并在服务器 API 中进行映射。

【讨论】:

    【解决方案2】:

    在共享项目中的实体上使用 System.ComponentModel.DataAnnotations 命名空间中的属性。这些在 UI 和客户端验证中很有用,并且不会引入对 EF 的依赖。

    然后使用 Server 项目中的 fluent API 进行任何额外的 EF 配置。

    【讨论】:

    • 除非您的应用程序很小并且不会增长,否则您应该使用 DTO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多