在Microsoft's ASP.NET architecture guidelines及其eShopOnWeb示例项目之后,我正在尝试从头开始实施Clean Architecture项目。
在我的案例中,EF实体优先于数据库。为此,我使用了Scaffold-DbContext
工具,但是它似乎不允许为生成的实体指定基类。 (我猜)通常不会出现问题,但是eShopOnWeb项目似乎对其所有实体都有一个BaseEntity
超类。
我的问题是-
我应该担心所有实体都扩展基类吗?如果我按原样使用实体该怎么办(我对此有些陌生,所以我可能会缺少一些非常基础的东西)?如果基类是正确的方法,是否存在用于生成具有预定义基类实体的“官方”解决方案?
eShopOnWeb-微软的官方示例应用程序-对数据库使用代码优先方法。就最佳实践而言,这是否意味着这是Microsoft的官方建议?我对此有些警惕,因为用这种方法我不确定如何进行数据库优化和微调(索引和所有其他特定于数据库的东西)等。
答案 0 :(得分:1)
实体不需要扩展基类。我唯一使用它们的系统是在某些/大多数实体具有真正公共字段的系统中,例如“ EditableEntity”,在其中可能放置了诸如CreatedBy,CreatedAt,ModifiedBy,ModifiedAt,RowVersion之类的公共字段。例如,我不使用基类作为“ Id”,因为经常会出现使用其他ID或为某些表采用复合ID的情况。
目前大多数示例都使用Code-First,因为它使用代码来建立模式,这就是开发人员希望他们理解而不是SQL理解的东西。 IMO对于快速启动和运行非常有用,但是从长远来看,我发现这比它的价值更大。 (一旦到达数据库数据完整性很重要的位置,就手动调整迁移。)就我个人而言,我从未使用过它,因为我来自在进行代码优先之前就曾使用过SQL和ORM的背景,因此我更愿意思考模式附带代码并使用显式映射来确保我确切知道EF将如何解释该模式。理解代码优先和迁移的工作原理是件好事,但是如果您对构建架构感到满意,那么DB-first很好。有关学习如何映射关系和有效查询数据的最佳实践发挥了作用。即利用.Select()
可能是充分利用实体框架的最难理解的方面。