• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > net编程 >

LINQ那些事儿(9)-解析Table<T>.Attach引发的异常和解决方法(6)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-27点击:

2、“先根据传入product对象的id,查询出原始的product,然后利用反射自动copy新属性”

DataContext专门提供了Refresh()函数,可以读取entity的数据库值,再通过指定的RefreshMode来刷新 entity的当前值或原始值。在更新entity前,我们首先需要Attach对象,因为通过 DataContext.Refresh(RefreshMode.KeepCurrentValues, entity)可获得entity的原始值,把判断entity是否已更改的工作交给DataContext,所以我们只需要调用 Attach(entity)或Attach(entity, false),而不需要调用Attach(entity, true)或Attach(entity, originalEntity),更不需要”copy”了。

3、“楼主的NorthwindDataContext实例化太厉害了,要知道datacontext是个很大的对象,应该避免不停地实例化。最好是一次request只有一个实例,你的问题就迎刃而解了。”

在LINQ2SQL的Design Intent有说过,LINQ2SQL的应用模式是“Unit of work”,即创建-调用-销毁,目的就是为了在调用完毕后快速释放DataContext由于保存对象副本和SQL连接所占用的资源,DataContext提供了足够的机制来保证实例化的消耗在可以接受的范围。但如果在一次http request里keep住DataContext对象,不小心反而会造成内存不必要的占用

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ