使用EF Code First简单删除查询

jho*_*els 7 entity-framework delete-row

有没有办法使用EF Code First来完成简单的事情

DELETE FROM Order WHERE OrderDate >= @minOrderDate AND OrderDate >= @maxOrderDate
Run Code Online (Sandbox Code Playgroud)

我有一个表,我想删除至少10.000条记录.我认为在使用for-each循环删除它们之前先检索所有记录是相当低效的.

Eri*_* J. 28

您可以使用

ctx.Database.ExecuteSqlCommand(sqlDeleteStatement,
    new SqlParameter("@minOrderDate", minDate),
    new SqlParameter("@maxOrderDate", maxDate));
Run Code Online (Sandbox Code Playgroud)

注意:接受的答案无法编译.


bdp*_*ish 3

您始终可以通过上下文发送原始 SQL。 _context.Database.SqlQuery(sqlDeleteStatement, parameterList)

string sqlDeleteStatement = "DELETE FROM Order" + 
    "WHERE OrderDate >= @minOrderDate AND OrderDate >= @maxOrderDate";

List<SqlParameter> parameterList = new List<SqlParameter>();

parameterList.Add(new SqlParameter("@minOrderDate", minDate));

parameterList.Add(new SqlParameter("@maxOrderDate", maxDate));

_context.Database.SqlQuery(sqlDeleteStatement, parameterList);
Run Code Online (Sandbox Code Playgroud)

  • 除非我弄错了,否则此处提供的代码甚至无法编译 - [generic](http://msdn.microsoft.com/en-us/library/gg696545(v=vs.103).aspx) 和 [non -generic](http://msdn.microsoft.com/en-us/library/gg679117(v=vs.103).aspx) 版本的“SqlQuery”采用类型参数,作为泛型或常规方法参数。您是否打算使用[`ExecuteSqlStatement`方法](http://msdn.microsoft.com/en-us/library/gg679456(v=vs.103).aspx)? (7认同)