可以在没有基础 class 的情况下使用 EFcore 生成的实体吗?

Can EFcore generated entities be used without a base class?

我正在尝试根据 Microsoft's ASP.NET architecture guidelines 和他们的 eShopOnWeb 示例项目从头开始实施一个干净的架构项目。

在我的案例中,EF 实体首先是数据库。为此,我使用了 Scaffold-DbContext 工具,但它似乎不允许为生成的实体指定基础 class。这通常不是问题(我猜),但 eShopOnWeb 项目似乎对其所有实体都有一个 BaseEntity superclass。

我的问题是-

  1. 我是否应该担心所有实体都扩展一个基础 class?如果我只是按原样使用实体怎么办(我对此有些陌生,所以我可能会遗漏一些非常基本的东西)?如果基数 class 是正确的方法,是否有 "official" 解决方案来生成具有预定义基数 class 的实体?

  2. eShopOnWeb - Microsoft 的官方示例应用程序 - 使用代码优先方法处理数据库。这是否意味着就最佳实践而言,这是 Microsoft 的官方建议?我有点担心它,因为使用这种方法我不确定如何进行数据库优化和微调(索引和所有其他数据库特定的东西)等。

实体不需要扩展基础class。我唯一一次使用它们是在我有 some/most 实体的真正公共字段的系统中,例如 "EditableEntity" 我可能会在其中放置公共字段,例如 CreatedBy、CreatedAt、ModifiedBy、ModifiedAt、RowVersion。例如,我不为 "Id" 使用基础 class,因为经常有使用不同 ID 或对某些表采用复合 ID 的情况。

大多数示例使用 Code-First 只是因为它使用代码来设置模式,这是他们希望开发人员理解而不是 SQL 的内容。在我看来,它非常适合快速 运行ning,但在长期 运行 中,我发现它带来的麻烦多于它的价值。 (一旦达到数据库数据完整性很重要的地步,就手动调整迁移。)就我个人而言,我从不使用它,因为我的背景是在代码优先之前使用 SQL 和 ORM,所以我更自在地考虑模式和代码并使用显式映射来确保我确切地知道 EF 将如何解释该模式。了解代码优先和迁移的工作原理很好,但如果您对构建模式感到满意,那么数据库优先就可以了。最佳实践在学习如何映射关系和有效查询数据方面发挥作用。 IE。利用 .Select() 可能是对充分利用 Entity Framework.

了解最少的方面