.net - Entity Framework 和应用程序架构(松耦合等)

标签 .net entity-framework architecture

我正在考虑在一个新项目中应用 Entity Framework ,因为我喜欢它的 OR/M-API 以及存储/概念模型映射功能(当然还有 Linq 和 Entity SQL)。

但是如果 UI 层和业务层都使用 EF 实体作为数据持有者,如何在 UI 层和业务层之间实现松耦合。如果我在实体驻留在 UI 中时将它们附加到其 ObjectContext,则 UI 可能会绕过业务层并直接连接到数据库。如果我在将实体传递到 UI 之前将它们与它们的 ObjectContext 分离,则不会进行更改跟踪,因此我必须“重播”业务层中的所有更改,以便将它们持久保存到数据库中(很难实现,尤其是使用亲子关系)。虽然我不希望业务层降级为“对象树持久引擎”,但在某些情况下拥有这种能力会很有帮助。

这当然也适用于其他 OR 映射器,但一些替代产品似乎具有更好的分离/附加机制。

最佳答案

“重播”更改比您想象的要容易。以下是您需要执行的操作的概要:

  1. 在分离实体实例并将其交给 UI 之前,存储实体实例的“原始”版本。
  2. 让 UI 完成它的任务。
  3. 当您想要将 UI 所做的更改保留到数据库时,请获取您存储的原始版本,并将其附加到 EntityContext。将 UI 返回的修改版本中的更改应用到此实例。现在保存更改。 Entity Framework 将处理三向合并。

关于.net - Entity Framework 和应用程序架构(松耦合等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/83153/

相关文章:

java - 最佳仪表板架构

c# - 我如何找出当前的 UnhandledExceptionMode

c# - 使用 EF Core 获取存储过程的输出参数值?

.net - 从网页轮询数据库? - ASP.NET

c# - 如何在 C# 中设置存储库中的一些实体属性?

database - 我可以先使用实体​​框架代码为单个集合属性创建单独的表吗?

android - Android 与其他 Linux 有何不同?

.net - 关于 "remoting"的最佳实践,一个带有 WCF 的 .NET 类库

c# - 当两个客户端都在 NAT 后面时如何创建 P2P 连接

.net - 如何使用 Linq 来确定此字符串 EndsWith 是否为值(来自集合)?