簡體   English   中英

如何使用Entity Framework刪除多行?

[英]How can I delete multiple rows with Entity Framework?

我有此代碼,但它不起作用:

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刪除它們,但是它不起作用?

刪除的一種方法是

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

首先獲取符合條件的所有實體,然后使用RemoveRange方法:

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

db.WebSite_PermissionDB.RemoveRange(entities);

db.SaveChanges();

你也可能想使用using的語句,以確保您DbContextDisposed正常。

using(MPortalContext db = new MPortalContext())
{ 
     ...
} 
var distinctResult = db.WebSite_PermissionDB.Distinct();
db.WebSite_PermissionDB.RemoveRange(db.WebSite_PermissionDB.Except(distinctResult));
db.SaveChanges();
    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(); 現在正確。 謝謝朋友。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM