我正在尝试在Microsoft's ASP.NET architecture guidelines及其eShopOnWeb示例项目之后从头开始实施Clean Architecture项目。
在我的情况下,EF实体是数据库优先。为此,我使用了Scaffold-DbContext
工具,但它似乎不允许为生成的实体指定基类。它通常不会是一个问题(我猜),但eShopOnWeb项目似乎有一个BaseEntity
超类的所有实体。
我的问题是 -
实体不需要扩展基类。我使用它们的唯一时间是在系统中,我有一些/大多数实体的真正共同字段,例如“EditableEntity”,我可以放置像CreatedBy,CreatedAt,ModifiedBy,ModifiedAt,RowVersion这样的常用字段。例如,我不使用“Id”的基类,因为通常有些情况使用不同的ID,或者对某些表采用复合ID。
大多数示例都使用Code-First,因为它使用代码来设置模式,这是他们期望开发人员理解而不是SQL。 IMO非常适合快速启动和运行,但从长远来看,我发现它比它的价值更麻烦。 (一旦你到达数据库数据完整性很重要的地方,就要手动调整迁移。)就个人而言,我从不使用它,因为我来自一个在代码优先之前使用SQL和ORM的背景,所以我更加自在地思考架构并行代码并使用显式映射来确保我确切知道EF将如何解释该架构。理解代码优先和迁移是如何工作的很好,但如果您对构建模式感到满意,那么DB-first就可以了。有关学习如何有效地映射关系和查询数据的最佳实践。即利用.Select()
可能是完全利用实体框架的最不了解的方面。