Svi*_*ish 84 c# linq-to-sql delete-row
要删除表中的所有行,我目前正在执行以下操作:
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
然而,这似乎需要很长时间.有更快的方法吗?
CMS*_*CMS 120
您可以使用DataContext.ExecuteCommand方法执行正常的SQL truncate或delete命令:
context.ExecuteCommand("DELETE FROM Entity");
Run Code Online (Sandbox Code Playgroud)
要么
context.ExecuteCommand("TRUNCATE TABLE Entity");
Run Code Online (Sandbox Code Playgroud)
要删除正在长,因为LINQ到SQL生成DELETE语句的方式每个实体,还有其他类型安全的方式做批量删除/更新,请检查下面的文章:
Kir*_*rst 20
不幸的是,LINQ-to-SQL不能很好地执行基于集合的查询.
你会认为
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
会翻译成类似的东西
DELETE FROM [Entities]
Run Code Online (Sandbox Code Playgroud)
但不幸的是,它更像是
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...
Run Code Online (Sandbox Code Playgroud)
当您尝试在LINQ-to-SQL中进行批量更新时,您会发现相同的内容.一次超过几百行,它只是太慢了.
如果您需要进行批处理操作并且使用LINQ-to-SQL,则需要编写存储过程.
fla*_*Zer 11
我喜欢使用扩展方法,具体如下:
public static class LinqExtension
{
public static void Truncate<TEntity>(this Table<TEntity> table) where TEntity : class
{
var rowType = table.GetType().GetGenericArguments()[0];
var tableName = table.Context.Mapping.GetTable(rowType).TableName;
var sqlCommand = String.Format("TRUNCATE TABLE {0}", tableName);
table.Context.ExecuteCommand(sqlCommand);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
77999 次 |
最近记录: |