gpt4 book ai didi

c# - 销毁 dataContext 与保持打开以供将来数据库访问的性能考虑?

转载 作者:行者123 更新时间:2023-11-30 12:34:18 26 4
gpt4 key购买 nike

我正在使用 LINQ2SQL 来处理我在 ASP 中的数据库需求。 Net MVC 3 项目。我有一个单独的 model,它在自己的类中包含我所有的数据库访问,如下所示:

 public class OperationsMetricsDB
{

public IEnumerable<client> GetAllClients()
{
OperationsMetricsDataContext db = new OperationsMetricsDataContext();
var clients = from r in db.clients
orderby r.client_name ascending
select r;
return clients;
}
public void AddClient(client newClient)
{
OperationsMetricsDataContext db = new OperationsMetricsDataContext();

db.clients.InsertOnSubmit(newClient);
db.SubmitChanges();

}

我在这个类中有大约 50 种不同的方法,它们都创建并销毁了我的 DataContext 的副本。我的理由是这种方式可以节省内存,因为它会在我使用连接并释放内存后破坏 DataContext。但是,我感觉最好使用 dataContext 的一个副本并保持打开状态,而不是一遍又一遍地处理和重新建立连接。例如

public class OperationsMetricsDB
{
OperationsMetricsDataContext db = new OperationsMetricsDataContext();
public IEnumerable<client> GetAllClients()
{
var clients = from r in db.clients
orderby r.client_name ascending
select r;
return clients;
}
public void AddClient(client newClient)
{
db.clients.InsertOnSubmit(newClient);
db.SubmitChanges();

}

这方面的最佳实践是什么?

最佳答案

为此,我个人将工作单元模式与存储库结合使用。

UnitOfWork 创建和管理 DataContext。然后它会在请求时将上下文传递给每个存储库。每次调用者想要对数据库执行一组新操作时,他们都会创建一个新的 UnitOfWork。

界面看起来像这样:

public interface IUnitOfWork
{
IRepository<T> GenerateRepository<T>();
void SaveChanges();
}

public interface IRepository<T> where T : class
{
public IQueryable<T> Find();
public T Create(T newItem);
public T Delete(T item);
public T Update(T item);
}

这确保上下文的生命周期正好是一个工作单元长(比单个操作长但比应用程序的生命周期短)。

关于c# - 销毁 dataContext 与保持打开以供将来数据库访问的性能考虑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com