我有这段代码,但它不起作用:
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删除它们但它不起作用?
答案 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();
。谢谢朋友们。