首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

一个EntityFramework有关问题

2014-01-14 
一个EntityFramework问题在使用EntityFramework时,创建了DbContext,在使用时是1, 每个方法Using即时创建即

一个EntityFramework问题
在使用EntityFramework时,创建了DbContext,

在使用时是   1, 每个方法Using即时创建即时销毁呢;   
还是应该     2, 线程中存在唯一DbContext,每个方法直接用,不管销毁。


示例:

1:

友情帮顶!
[解决办法]
你说的线程唯一DbContext其实就是Singleton模式,这种模式下一个地方出问题很容易导致使用同线程的其它地方的代码出现不可预料的异常,所以不建议使用,在Web应用中,DbContext的重建和销毁,最好是基于每个请求(Per Request),它对应的底层操作主要就是数据库的连接和断开,因为有连接池的存在,每次重新打开数据库连接的代价非常小,基本可以忽略。个人意见,仅供参考!
[解决办法]
我在WCF中使用的HTTP协议的时候是一个请求生成一个请求完毕销毁
在长连接模式中直接生成一个始终使用这一个直到用户退出或者掉线才销毁
你的这种方式 一次查询就要生成和销毁一个 感觉效率上也跟不上
[解决办法]
你的第二种方式好用一点吧 你在Web中这是存在哪了- -
[解决办法]
最好每次都创建一个新的,因为有数据库连接池存在,这个也不是多么影响性能。单例会出现很多不可预知的错误。
另外using 是不必须的,可以交给。net自己去管理。
[解决办法]
是否连接或断开数据库是ef自动管理的,和DbContext的创建销毁无关,所以影响不了多少性能

但你这两种方法都会造成异常

第一种如果你用一个方法获取数据,另一个方法修改保存数据,就会出现追踪对象不在同一个DbContext的异常

第二种DbContext的实例是非线程安全的,多个请求同时并发就有可能会出现异常

web里一个完整的动作是基于请求的,所以DbContext也应该每个请求一个这样就不会互相影响

[解决办法]
没有必要用单例模式来做数据库链接,这样体现不出多线程模式,所有数据都要排除处理

如果有部分数据要求精度比较高,只要对部分数据lock就可以了

热点排行