连接到SQL Server进行事务的方法是正确的

时间:2017-07-15 11:50:34

标签: c# sql-server asp.net-mvc entity-framework

删除实体哪种方式更正确?

正确意味着:对于很多行,我们应该使用更可信赖的方式并在工作结束后关闭事务

首先尝试:

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%

1 个答案:

答案 0 :(得分:2)

你应该选择第二种方式而不是第一种方式。

删除您可以执行的多行,如下所述。

using (var dbContext = new IraniBotEntities())
 {
     var allRec= dbContext.Users;
     dbContext.Users.RemoveRange(allRec);
     dbContext.SaveChanges();
 }