【发布时间】: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