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

问题描述 投票:0回答:1

我正在尝试在Microsoft's ASP.NET architecture guidelines及其eShopOnWeb示例项目之后从头开始实施Clean Architecture项目。

在我的情况下,EF实体是数据库优先。为此,我使用了Scaffold-DbContext工具,但它似乎不允许为生成的实体指定基类。它通常不会是一个问题(我猜),但eShopOnWeb项目似乎有一个BaseEntity超类的所有实体。

我的问题是 -

  1. 我是否应该担心让所有实体扩展基类?如果我只是按原样使用实体怎么办(我对此有点新,所以我可能会遗漏一些非常基本的东西)?如果基类是正确的方法,是否有一个“官方”解决方案用于生成具有预定义基类的实体?
  2. eShopOnWeb - 微软的官方示例应用程序 - 使用代码优先于db的方法。这是否意味着就最佳实践而言,这是微软的官方建议?我有点担心它,因为使用这种方法我不确定如何完成数据库优化和微调(索引和所有其他数据库特定的东西)等。
entity-framework ef-core-2.0 clean-architecture
1个回答
1
投票

实体不需要扩展基类。我使用它们的唯一时间是在系统中,我有一些/大多数实体的真正共同字段,例如“EditableEntity”,我可以放置像CreatedBy,CreatedAt,ModifiedBy,ModifiedAt,RowVersion这样的常用字段。例如,我不使用“Id”的基类,因为通常有些情况使用不同的ID,或者对某些表采用复合ID。

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

© www.soinside.com 2019 - 2024. All rights reserved.