如何使用Entity Framework删除多行?

时间:2014-03-27 12:22:31

标签: c# entity-framework entity

我有这段代码,但它不起作用:

public bool DeleteAccess(int _UserID, IEnumerable<int> _ModulID)
{
    MPortalContext db=new MPortalContext();
    foreach (var item in _ModulID)
    {
        var validation = db.WebSite_PermissionDB.Where(x => x.UserID == _UserID && x.ModuleID == item);
        db.WebSite_PermissionDB.Remove(validation);
    }
    db.SaveChanges();
    return true;
}

我的(_ModulID)是我过滤它们的id的集合,然后用foreach删除它们但它不起作用?

4 个答案:

答案 0 :(得分:2)

删除的一种方法是

context.Database.SqlQuery<WebSite_PermissionDB>(
  "DELETE FROM Users WHERE UserID = @userId  ",
  new [] { new SqlParameter("@userId ", 1) }
);

答案 1 :(得分:1)

首先获取所有符合条件的实体,然后使用RemoveRange方法:

var entities = db.WebSite_PermissionDB
           .Where(x => x.UserID == _UserID && _ModulID.Contains(x.ModuleID));

db.WebSite_PermissionDB.RemoveRange(entities);

db.SaveChanges();

此外,您可能需要使用using语句,以确保DbContext Disposed正确{。}}。

using(MPortalContext db = new MPortalContext())
{ 
     ...
} 

答案 2 :(得分:0)

var distinctResult = db.WebSite_PermissionDB.Distinct();
db.WebSite_PermissionDB.RemoveRange(db.WebSite_PermissionDB.Except(distinctResult));
db.SaveChanges();

答案 3 :(得分:0)

    MPortalContext db=new MPortalContext();
    foreach (var item in _ModulID)
    {
        var validation = db.WebSite_PermissionDB.Where(x => x.UserID == _UserID && x.ModuleID == item).FirstOrDefault();
        db.WebSite_PermissionDB.Remove(validation);
        db.SaveChanges();
    }  
    return true;

我忘了现在正确使用.FirstOrDefault();。谢谢朋友们。