C# 连接到SQL Server进行事务处理的正确方法是什么
哪种方式删除实体更正确 正确的方法:对于很多行,我们应该使用更可信的方式,并在工作结束后关闭事务 第一次尝试:C# 连接到SQL Server进行事务处理的正确方法是什么,c#,sql-server,asp.net-mvc,entity-framework,C#,Sql Server,Asp.net Mvc,Entity Framework,哪种方式删除实体更正确 正确的方法:对于很多行,我们应该使用更可信的方式,并在工作结束后关闭事务 第一次尝试: public class UserRepository : IDisposable { private DomainModels.BotEntities _dbDnt = null; public UserRepository() { _dbDnt = new DomainModels.IraniBotEntities(); }
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);
}
}
using (var dbContext = new IraniBotEntities())
{
dbContext.Users.Remove(user);
dbContext.SaveChanges();
}
然后像这样使用:
UserRepository repA = new UserRepository();
repA.Delete(user);
第二次尝试:
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);
}
}
using (var dbContext = new IraniBotEntities())
{
dbContext.Users.Remove(user);
dbContext.SaveChanges();
}
哪种方式更正确?因为我在第一种方式中使用了hangfire,服务器上的cpu将达到100%您应该选择第二种方式而不是第一种方式 要删除多行,可以按如下所述操作
using (var dbContext = new IraniBotEntities())
{
var allRec= dbContext.Users;
dbContext.Users.RemoveRange(allRec);
dbContext.SaveChanges();
}
第二您应该总是在完成单个工作单元后立即处理DB资源。尽管如此,这可能不是为什么你的CPU“达到100%”的原因。那么我该怎么办呢?这两种方法都不应该导致你的CPU达到那么高。这里还有别的问题。您发布的任何一种方法都可以。您需要分析您的应用程序以发现发生了什么。第一种方法的优点是,在调用SaveChanges之前可以执行多个操作,因此可以跨多个语句执行单个事务。所以不要听那些说第二种方法永远是最好的。