作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!