加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 破坏dataContext与保持未来数据库访问的性能考虑?

发布时间:2020-12-15 17:20:13 所属栏目:百科 来源:网络整理
导读:我正在使用LINQ2SQL来处理ASP中的数据库需求. Net MVC 3项目.我有一个单独的模型,其中包含我自己的类中的所有数据库访问,如下所示: public class OperationsMetricsDB{ public IEnumerableclient GetAllClients() { OperationsMetricsDataContext db = new
我正在使用LINQ2SQL来处理ASP中的数据库需求. Net MVC 3项目.我有一个单独的模型,其中包含我自己的类中的所有数据库访问,如下所示:

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);
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读