删除实体哪种方式更正确?
正确意味着:对于很多行,我们应该使用更可信赖的方式并在工作结束后关闭事务
首先尝试:
public class UserRepository : IDisposable
{
private DomainModels.BotEntities _dbDnt = null;
public UserRepository()
{
_dbDnt = new DomainModels.IraniBotEntities();
}
public bool Delete(int id, bool autoSave = true)
{
try
{
var entity = _dbDnt.Users.Find(id);
_dbDnt.Entry(entity).State = EntityState.Deleted;
if (autoSave)
return Convert.ToBoolean(_dbDnt.SaveChanges());
else
return false;
}
catch
{
return false;
}
}
public int Save()
{
try
{
return _dbDnt.SaveChanges();
}
catch
{
return -1;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (this._dbDnt != null)
{
this._dbDnt.Dispose();
this._dbDnt = null;
}
}
}
~UserRepository()
{
Dispose(false);
}
}
然后像这样使用:
UserRepository repA = new UserRepository();
repA.Delete(user);
第二次尝试:
using (var dbContext = new IraniBotEntities())
{
dbContext.Users.Remove(user);
dbContext.SaveChanges();
}
哪种方式更正确?因为我正在使用第一种方式的hangfire,而我在服务器上的cpu将达到100%
答案 0 :(得分:2)
你应该选择第二种方式而不是第一种方式。
删除您可以执行的多行,如下所述。
using (var dbContext = new IraniBotEntities())
{
var allRec= dbContext.Users;
dbContext.Users.RemoveRange(allRec);
dbContext.SaveChanges();
}