我正在考虑在一个新项目中应用实体框架,因为我喜欢它的 OR/M-API 以及存储/概念模型映射功能(当然还有 Linq 和 Entity SQL)。
但是,如果 EF 实体在两者中都用作数据持有者,如何在 UI 层和业务层之间实现松散耦合。如果我在实体驻留在 UI 中时将实体附加到其 ObjectContext,则 UI 可能会绕过业务层并直接连接到数据库。如果我在将实体从它们的 ObjectContext 传递到 UI 之前将它们从它们的 ObjectContext 中分离出来,则不会有更改跟踪,因此我必须“重放”业务层中的所有更改,以便将它们持久化到数据库中(很难实现,尤其是亲子关系)。虽然我不希望业务层降级为“对象树持久性引擎”,但在某些情况下拥有这种能力会有所帮助。
这当然也适用于其他 OR-mapper,但一些替代产品似乎具有更好的分离/附加机制。