【问题标题】:With Entity Framework Core database first approach how do I separate my entity from infrastructure layer?使用 Entity Framework Core 数据库优先方法,我如何将我的实体与基础设施层分开?
【发布时间】:2020-06-05 16:15:49
【问题描述】:

我正在使用 ASP.NET Core 和 Entity Framework Core 构建 REST API,并采用具有简洁架构的数据库优先方法。

我的数据库已经由 DBA 团队创建和维护 - 这就是为什么我需要使用具有数据库优先方法的 Entity Framework Core,并且我们需要在基础架构层中使用 Scaffold-DbContext 命令进行逆向工程。

使用干净的架构,实体应放置在与基础设施层分开的Core 层中,因此我们将如何做到这一点以及如何将您的DbContext 解析为接口。

【问题讨论】:

  • 我不确定我是否理解你的问题,但如果你问如何抽象 DbContext,存储库模式可能会有所帮助。

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


【解决方案1】:

我看到两个选项:

  1. 您接受对 EF 的依赖,将生成的实体放入您的核心项目中,然后接受违规以清理架构。

  2. 您在 Core 项目中创建自己的实体而不依赖于 EF,并使用存储库模式在您的实体和来自 EF 的实体之间“映射”。

替代方案 1 简单且便宜。备选方案 2 使您能够独立于 EF 并为您的 dba 团队提供一些抽象。根据对您的项目更重要的内容进行选择。

【讨论】:

  • 我会选择 1 个选项。将自动生成的数据库实体从持久层移动到域层(由 Scaffold-DbContext 命令生成)是最佳实践吗?是否有任何命令可以在单独的层中生成数据库实体和在单独的层中生成数据库上下文?
  • 这完全取决于您想要优化的目标:您需要快速原型设计吗?您的代码库是否很小?选项 1 可能是最好的。您是否需要独立于其他团队、特定框架和技术,并且您的代码库很大并且需要维护多年:选择选项 2。(我不知道这样的命令)
猜你喜欢
  • 1970-01-01
  • 2020-06-15
  • 2023-01-26
  • 2020-02-29
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
相关资源
最近更新 更多