我在聚簇索引上删除了大约5000行我的表,而EF需要将近30秒才能完成.
记录生成的SQL显示它正在为每一行执行一次删除:
DELETE [dbo].[Table]
WHERE ([ColumnID] = @0)
Run Code Online (Sandbox Code Playgroud)
所以共有5000笔交易.
我已经尝试批量调用SaveChanges(),但这似乎没有提高性能,或改变上述行为.
//loop
{
//get batch
db.Table.RemoveRange(batch);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我看了一些其他问题,指出了每行执行删除命令的这个缺陷,但之后没有提出建议: 如何在Entity Framework中删除多行(没有foreach)
有没有办法阻止EF每行执行一个命令?如果可能的话,我想避免使用内联SQL.
以下语句应该从allCars中删除someCars,并且它可以工作,但我想知道是否有更好的解决方案,只专门使用linq
foreach (var car in someCars)
{
db.allCars.DeleteObject(car);
}
Run Code Online (Sandbox Code Playgroud)
请注意,db是db实体的实例.
任何帮助将非常感激.
如何将由逗号分隔的整数数组ExecuteStoreCommand作为参数传递给实体中我无法执行此操作:
this.ObjectContext.ExecuteStoreCommand("INSERT INTO SurveyPatientListMrns
(UserData, MrnId) SELECT DISTINCT '{0}' , MrnId
FROM PatientVisits WHERE (FacilityId = {1})
AND (UnitId IN ({2}))", userData, facilityId, (string.Join(",", unitIds)));
Run Code Online (Sandbox Code Playgroud)
这(string.Join(",", unitIds))是一个字符串,由于逗号,我无法将其转换为整数.我怎么能传递参数呢?
仅供参考,unitIds是一个整数数组
我想删除EF5中的多行.
我发现的更接近的是 如何在Entity Framework中删除多行(没有foreach)
由于我需要使用LINQ(SQL IN)版本并且我不想执行SQL,因此我想知道如何继续这样做.
我有一个列表,ID's我需要将它传递给IN.我该如何实施?LINQ to Entities(EF)
尝试做的SQL版本:
DELETE FROM TEST WHERE TESTID IN (2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
我需要从中传递IN参数LIST<ID>.
在EF中实现这一目标的最佳方法是什么?
谢谢