【问题标题】:EF Core entity classes and Clean architectureEF Core 实体类和 Clean 架构
【发布时间】:2021-06-29 02:09:51
【问题描述】:

我正在构建一个新的 ASP.NET Core 5 MVC 应用程序。我想使用 Microsoft 的 Web 应用架构电子书中概述的干净架构。

我也在研究这里提供的 eShopOnWeb 示例应用程序:

https://github.com/dotnet-architecture/eShopOnWeb

我从电子书和示例应用程序中了解到 - EF Core 实体类(例如客户、产品、订单)将进入 ApplicationCore 项目的实体文件夹。 DbContext 将在基础设施项目中。

我的困惑是:可以在ApplicationCore 项目内的这些实体类上添加[Table][DatabaseGenerated][Key] 等数据注释架构属性吗?如果没有,我应该在哪里添加这些数据注释?

非常感谢您提供这方面的任何建议。

谢谢。

【问题讨论】:

  • 您可以使用fluent API 配置模型 - 这将允许您删除属性并在基础架构项目中进行配置。
  • 除此之外,您可以摆脱很多基于约定的配置。如果您发现必须一遍又一遍地添加相同的配置,您可能会尝试与 EF Core 抗争。尽量避免这种情况,除非你有充分的理由或者看看是否有办法覆盖默认行为。
  • 您所问的与架构无关。事实上,在大多数情况下,您不会使用相同的 DTO 进行数据访问(即使用 EF Core)、业务逻辑或 API/ViewModel DTO。 EF Core 加载的实体将属于您放置数据访问代码的任何项目或层。不必称为Infrastructure。在大多数情况下,您必须将数据库 DTO 映射到业务 DTO,然后再映射到 API DTO
  • 因此向数据 DTO 添加数据属性不是问题。当然,您可以使用流畅的配置,尤其是当您不想要单独的业务/数据 DTO 时。流畅的配置意味着您将所有配置集中在一个地方,在 DbContext 中,这可以使维护/版本控制更容易
  • 虽然是一个有效的问题,但我认为这个问题的答案总是固执己见。无论如何,我喜欢this presentation on clean architecture。它还建议使用 EF fluent API,因为(根据演示者)它更强大。我自己对此并不完全确定。

标签: c# asp.net-core .net-core entity-framework-core clean-architecture


【解决方案1】:

eShopOnWeb 的示例中,它们将实体和配置模型分开。因此,这意味着拥有干净的架构,您不需要直接在这些实体中进行注释。

您可以使用 FluentAPI,就像它们在 Infrastructure/Data/Config 目录中使用的一样。

因此,如果您有一个单独的 DataContext 项目,在这种情况下,这是使用 FluentAPI 描述您的实体的最佳位置。

有关 FluentAPI 的更多信息: https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/fluent/types-and-properties

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2021-01-02
    相关资源
    最近更新 更多