我应该使用 EF 实体来混合域对象吗?

Should I hydrate a domain object using a EF Entity?

有很多关于此的问题,但据我所知,none 解决了这个问题。

域对象消耗 EF 实体来水化它是错误的吗?一方面,这与纪念品非常相似。 EF 实体可以被视为 DTO 或活动记录。

另一方面,这似乎将域耦合到 DAL(因为 EF 实体可以被认为是 DAO 的)

编辑 澄清我在这里问的问题...我有一个域模型不知道我的数据访问层。存储库 return 我的 DO,但那些 DO 是使用 DTO 放在一起的。 DTO 是 属性 包,专门供存储库用来补充 DO。因此,即使我的 DO 不依赖于 EF 实体,它们也依赖于 DTO,而 DTO 的唯一工作是从 EF 实体映射……所以我创建了专门用于设施水合作用的代码。我觉得有点臭

我绝对不是在问 DO 是否应该使用 EF 来坚持自己。我在问我是否可以 读取 来自 EF 实体来补充溶解氧。

不要将 EF 实体保留到数据服务层之后。

部分原因是名称冲突。然而,即使您从未打算让您的产品在非 EF 平台上运行,您也应该从实际对象及其方法中抽象出它如何持久化(EF 结构)的细节。

我在 .NET 世界的几个项目中都有个人经验,这些项目一直使用 EF 生成的对象到 ASP .NET 层,但它永远不会顺利结束。当您这样做时,您将引入足够多的耦合,使您的应用程序实际上从 n 层变为 1 层。

这里有一个更好的方法 -

使用您的方法(保存、获取等)创建 IPersistenceService 接口。

为 entity framework 创建实现 - EFPersistenceService。

在您的每个方法中,将 EF 对象映射到您的实体模型 - 您可以使用自动映射器或其他技术轻松完成此操作。

你的应用程序的其余部分应该只通过 IPersistenceService 与数据库对话(始终编程到接口规则的应用程序)。

如果这看起来有点矫枉过正 - 问问自己将来如何通过拆分数据库 (CQRS) 来提高性能,或者是否出于性能原因必须更改对存储过程的特定更新?