Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 实体框架中的附着对象与分离对象_Asp.net Mvc_Wcf_Entity Framework - Fatal编程技术网

Asp.net mvc 实体框架中的附着对象与分离对象

Asp.net mvc 实体框架中的附着对象与分离对象,asp.net-mvc,wcf,entity-framework,Asp.net Mvc,Wcf,Entity Framework,使用附着对象和分离对象的好处是什么 我目前在存储库中所做的是在更新或删除对象之前手动分离对象。所以,如果我要更新或删除,我不会进行往返,而是按ID删除。我认为使用分离场景对我来说是可行的。我做错什么了吗 我正在使用一个利用asp.net mvc和wcf的n-teir应用程序。使用附加对象将允许您操作、跟踪更改和进行并发优化。在大多数情况下,我使用附加对象进行更新或在有状态的应用程序中使用。这还允许您进行延迟加载,并从上下文缓存中获益。如果您以状态完整的方式使用实体框架,这是非常好的,因为当您需要

使用附着对象和分离对象的好处是什么

我目前在存储库中所做的是在更新或删除对象之前手动分离对象。所以,如果我要更新或删除,我不会进行往返,而是按ID删除。我认为使用分离场景对我来说是可行的。我做错什么了吗


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

使用附加对象将允许您操作、跟踪更改和进行并发优化。在大多数情况下,我使用附加对象进行更新或在有状态的应用程序中使用。这还允许您进行延迟加载,并从上下文缓存中获益。如果您以状态完整的方式使用实体框架,这是非常好的,因为当您需要来自上下文的单个对象时,可以减少对数据库的调用次数。使用GetObjectByKey将在查询数据库之前查询上下文。如果之前加载了该对象,则可以节省到数据库的往返时间


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

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

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

编辑:

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


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

有没有办法在分离的对象上进行延迟加载?“它允许更快的读取,更简单的对象可以具体化”-我不认为这是真的。您能解释一下吗?查询将更快地返回对象,因为它不需要将所有跟踪添加到对象,也不需要将对象添加到上下文对象图中。这将导致更少的复杂对象(无更改跟踪)和更少的工作/对对象的引用。我想我们在这里讨论的是纳秒。我之所以这么说,是因为当你说“更快”时,开发者们会疯狂地试图优化他们的应用程序。您对分离对象的好处的表述方式似乎让人觉得使用它们的性能改进实际上很重要,而事实并非如此。@jfar-我遇到过这样的情况:不跟踪和分离对象确实会产生巨大的差异。对于小的结果集或结果集返回的简单对象,这种差异是不明显的。但是当你有一个包含很多属性和导航属性的对象被加载时,它会产生不同的效果。你会通过网络发送实体吗?您几乎可以保证在您的场景中使用EF分离和连接的实体。即使是单层webapp在某个时候也会有分离的实体。你能澄清这个问题吗?
entity.User.Attach(model);
entity.ObjectStateManager.ChangeObjectState(model,System.Data.EntityState.Modified);
entity.SaveChanges();
return View(model);