我正在使用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); }
这确保了上下文的生命周期恰好是一个工作单元长(比单个操作长但比应用程序的生命周期短).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。