首页 新闻 会员 周边 捐助

EntityFramework5(4.x大概也是这样)中插入数据的问题

0
悬赏园豆:15 [已解决问题] 解决于 2012-11-23 11:53

大家好,有一个问题请大家指点:

Entity Framework5(4.x大概也是这样)中通过Add方法插入数据,主键是数据库自增的。EF在执行时会生成如下语句:

exec sp_executesql N'insert [dbo].[Values]([F], [T], [L])
values (@0, @1, @2)
select [Id]
from [dbo].[Values]
where @@ROWCOUNT > 0 and [Id] = scope_identity()',N'@0 int,@1 int,@2 int',@0=1,@1=5,@2=10

Select肯定是为了更新本地的实体,但对于插入数据比较大的情况,这样做比较慢,请教有没有方法不让其执行Select,另外征询更好的批量写入的方法。谢谢

hystar的主页 hystar | 初学一级 | 园豆:38
提问于:2012-11-22 16:23
< >
分享
最佳答案
0

简单查了下:

busContext.Configuration.AutoDetectChangesEnabled = false;

据说这条语句可以禁用更改检测。

简单试了下,生成的SQL不变,但速度提高相当相当的明显。

看了下源码(相当的复杂,看看皮毛),这个语句禁用的是ObjectContext中的一些更改跟踪。不影响生成的SQL。

先这样凑合着,期待高手给全面解答

hystar | 初学一级 |园豆:38 | 2012-11-23 11:52
其他回答(3)
0

这样 Context才能跟踪,才能知道你插入的id,在代码中才可以直接获取刚插入的id,你也可以直接执行你的sql语句

收获园豆:3
Qlin | 园豆:2403 (老鸟四级) | 2012-11-22 16:46

嗯,了解,我就是想通过配置选择性不让它跟踪,除了手写sql没有其它方法了吗?

支持(0) 反对(0) hystar | 园豆:38 (初学一级) | 2012-11-22 16:56

@hystar: 

不了解了,LZ找到le 方法 贴一下

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2012-11-22 16:57
0

你可以了解下EF的实体跟踪功能,看看能不能移除掉或者绕过。

收获园豆:12
Launcher | 园豆:45050 (高人七级) | 2012-11-22 17:04

嗯,下班回去查查文档,看看源码。

支持(0) 反对(0) hystar | 园豆:38 (初学一级) | 2012-11-22 17:26
0

自己写存储过程,然后让Add方法去绑定你自己写的存储过程来更新数据库!

heqichang | 园豆:275 (菜鸟二级) | 2012-11-22 19:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册