大家好,有一个问题请大家指点:
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,另外征询更好的批量写入的方法。谢谢
简单查了下:
busContext.Configuration.AutoDetectChangesEnabled = false;
据说这条语句可以禁用更改检测。
简单试了下,生成的SQL不变,但速度提高相当相当的明显。
看了下源码(相当的复杂,看看皮毛),这个语句禁用的是ObjectContext中的一些更改跟踪。不影响生成的SQL。
先这样凑合着,期待高手给全面解答
这样 Context才能跟踪,才能知道你插入的id,在代码中才可以直接获取刚插入的id,你也可以直接执行你的sql语句
嗯,了解,我就是想通过配置选择性不让它跟踪,除了手写sql没有其它方法了吗?
@hystar:
不了解了,LZ找到le 方法 贴一下
你可以了解下EF的实体跟踪功能,看看能不能移除掉或者绕过。
嗯,下班回去查查文档,看看源码。
自己写存储过程,然后让Add方法去绑定你自己写的存储过程来更新数据库!