首页 新闻 会员 周边

请问EF中的上下文对象是否需与数据库连接类一样用完即释放掉?

0
悬赏园豆:20 [待解决问题]

如题,在大型项目里面,一般都是如何控制上下文对象的生存周期的?

bombWord的主页 bombWord | 初学一级 | 园豆:182
提问于:2012-11-17 14:39
< >
分享
所有回答(6)
0

用完就显示 释放  

Qlin | 园豆:2403 (老鸟四级) | 2012-11-17 21:20
1

用完最好释放了,也就是using(),至于怎么控制上下文的生命周期,使用唯一的线程就行了!

Kencery | 园豆:357 (菜鸟二级) | 2012-11-18 07:36

需要显示的dispose吗

支持(0) 反对(0) bombWord | 园豆:182 (初学一级) | 2012-11-18 14:30

@轰炸全世界: 需要!

支持(0) 反对(0) Kencery | 园豆:357 (菜鸟二级) | 2012-11-18 20:56
0

一般是Using  因为Using实现了Idispiable接口的么,,在程序执行完时。会自动调用。。但在有些情况下。。比如网络问题等。。这时可能是Broken状态。。然后你在次Open的时候 有报错。。 

在 水 一 方 | 园豆:1097 (小虾三级) | 2012-11-19 09:28
0

是的,他有自己的回收机制,还有就是,他会把数据读到内存中。

jerry-Tom | 园豆:4077 (老鸟四级) | 2012-11-19 10:26
1

借楼主宝地再顺便问下,用完立即释放掉的话,

首先每次创建、释放此上下文对象会不会很耗费性能?

第二,如果要执行多个方法,如果保证多个方法在同一事务?

RyanCheng | 园豆:474 (菜鸟二级) | 2012-11-27 14:11
1

关于EF上下文生命周期的问题:

1、即用即放的思想是从ADO.NET的使用方式而来,但使用这种方式,上下文无法对已加载的对象进行跟踪,也无法做到延迟加载;

2、当项目相对简单时,也有将上下文对象设置为单例的,这样可以很方便的提交事务,但在EF中,所有从数据库加载到内存中的对象都会被EF自动跟踪,当越来越多的对象被从数据库查询后,内存占用也会越来越高;

合理的做法是针对用例来实例化上下文对象,具体实现请参考:http://www.cnblogs.com/happyframework/archive/2013/04/18/3026812.html

nianhua11 | 园豆:736 (小虾三级) | 2013-04-30 10:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册