asp.net-mvc - Entity Framework 中的附加对象与分离对象

标签 asp.net-mvc wcf entity-framework

使用附加对象与分离对象相比有什么好处?

我当前在存储库中执行的操作是在更新或删除对象之前手动分离它们。因此,如果我要更新或删除,我不会进行往返,而是通过 ID 进行删除。我认为处理独立的场景对我来说很有效。我做错了什么吗?

我正在使用一个利用 asp.net mvc 和 wcf 的 n-teir 应用程序。

最佳答案

使用附加对象将允许您操作、跟踪更改、进行并发优化。在大多数情况下,我使用附加对象进行更新或在有状态应用程序中。这也将允许您进行延迟加载并从上下文缓存中受益。如果您以有状态的方式使用 Entity Framework ,那么这非常好,因为当您需要上下文中的单个对象时,您可以减少对数据库的调用次数。使用 GetObjectByKey 将在查询数据库之前查询上下文。如果该对象之前已加载,它将节省您与数据库的往返路程。

使用分离的对象非常棒!它允许更快的读取、更简单的对象实现、更小的实体上下文内存占用。通过线路(wcf..服务)发送数据时也是最好的。任何超出范围的内容,甚至当您将对象转换为域对象时。由于您不需要对对象进行任何跟踪,因此这是一个很好的优化。使用实体集上的 NoTracking 合并选项可以快速实现这一点。

分离对象还将大大简化在拥有许多上下文实例的环境中使用 EF 的过程。只需在进行更改和保存之前附加对象即可。

注意:使用 NoTracking 将不允许您使用延迟加载、更改跟踪、GetObjectByKey 或 Entity Framework 的任何有状态功能。使用 NoTracking,您将需要使用预先加载(“Include()”)来加载相关实体/导航属性。 EntityKeys 也不会被加载。

编辑:

分离实体上的延迟加载不起作用,因为它没有可供查询的上下文。该实体还可能缺少所需的代理和实体 key 。

我强烈建议使用预先加载。这最终也可能是一种优化,因为很难衡量延迟加载的影响。因为它可能会产生这样的情况:如果您正在迭代集合,它将向数据库发出集合中每个对象的请求。当您有大量集合时,这可能会产生很大的问题。

关于asp.net-mvc - Entity Framework 中的附加对象与分离对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5598978/

相关文章:

c# - 无法在 MVC 5 ASP.Net 中将 byte[] 渲染为图像

c# - 如何在自定义 HtmlHelper 中使用 Html.TextAreaFor() 方法?

asp.net-mvc - log4net 无法在 MVC 应用程序中使用 log4net Appender azure 工作

entity-framework - EF Code First 一对多和反向一对一关系

entity-framework - CQRS 是 CRUD 的替代品吗?

c# - Entity Framework 代码第一个子导航属性 null

javascript - 如何创建基于网络服务的计时器?

c# - Microsoft ServiceBus - 参数实体名称为 null 或为空

Java网络服务: null request parameter

c# - 使用 Entity Framework 分离数据层和域层的正确方法