.net - EF 对象是否是业务对象?

标签 .net entity-framework orm business-objects

Possible Duplicate:
Using Entity Framework entities as business objects?

我正在考虑使用 Entity Framework 作为 ORM,但在进行大量阅读后,我真的很困惑 EF 对象到底适合哪里。

我的印象是 ORM 的全部意义在于消除将对象映射到关系数据库的苦差事和复杂性。您加载数据库并获得一堆像魔法一样的对象。 CRUD 的事情都是针对对象完成的。如果数据库发生变化,您会更改映射,但您的对象保持不变。

这意味着您将在整个系统中使用这些对象,并且它们将具有行为。它们是业务对象。这对我来说很有意义,而且确实是 MS tells you how to add behaviour

但是,我读过很多人说您永远不应该使用 EF 对象作为您的业务对象,因为它们只关心数据的持久性,并且会将您的业务对象与 EF 结合起来。他们建议使用 EF 作为数据层的抽象,并将它们映射到真实的业务对象。

这对我来说似乎毫无意义。当我最终仍然映射到我的业务对象时,为什么还需要另一个抽象层?如果我必须映射 EF 属性,我不妨映射 DB 列!

我认为 ORM 的全部意义在于自动化映射并充当后备存储的抽象?我错过了什么吗?

编辑:我所说的行为是指业务逻辑。验证、计算属性、业务方法等。

最佳答案

一般来说,那些说不应使用 EF 生成的类作为业务层的人是正确的。

不过,在小型应用程序中,您绝对可以直接从 UI 中使用 EF 类。

随着应用程序大小和功能的增长,您肯定会在 UI 中使用 EF 类时遇到问题:选择 N+1( View 中发生延迟加载)、序列化(循环引用)、AJAX/jQuery(发送对于微小的更新场景来说,网络上的对象图太大)等。

人们经常推荐 AutoMapper (https://github.com/AutoMapper/AutoMapper) 在 EF 类和 DTO 类以及业务层类之间进行映射,以减少编写大量映射代码的繁琐。

我认为这绝对是你可以根据你的项目需求做出的决定,并不一定有正确的答案。如果您开始感到疼痛,您可以随时改变方向。一如既往,选择最适合您的项目的最简单的解决方案。

关于.net - EF 对象是否是业务对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11828680/

相关文章:

c# - 找不到 npoi.xssf.usermodel

c# - 一个类的某些实例而不是其他实例的静态/共享变量

c# - 如何在不加载相关记录的情况下判断是否设置了Entity Framework中的Navigation Property

php - Doctrine2 - 列在刷新之前更改为空

asp.net - 奇怪的错误 : [ArgumentOutOfRangeException: 'count' must be non-negative

java - 如何告诉 EclipseLink 在 SQL 中使用完整的表名称作为别名

c# - 可配置的 Windows 服务 - 如何以及在何处存储配置

.net - .ToTitleCase 不适用于所有大写字符串

c# - DDD - 表示层和领域层之间的通信

asp.net - Entity Framework DAL、BLL 与存储库模式