保持LINQ-to-SQL DataContext打开多长时间?

JnB*_*ymn 1 linq-to-sql

我是linq-to-sql的新手(也就是sql),我已经开始收集证据证明我可能没有以正确的方式做事,所以我想看看你们都要说些什么.

在我的员工分配应用程序中,我允许用户在员工和项目之间创建分配.在应用程序开始时,我打开了一个linq-to-sql数据上下文到我的管理数据库.在整个计划中,我从不放弃数据上下文.事实上,大多数表单构造函数都将此数据上下文作为其参数之一.

我有点认为这是做事的方式,直到我读到另一个SO问题,其中提问者正在讨论在整个程序中重复地重新创建数据上下文,然后根据需要将实体"附加"到新的数据上下文中.这可以帮助我解决我遇到的问题,其中的东西"潜入"我的数据库.

那么你会在哪里使用第一种风格(并且不要羞于说永远),你会在哪里使用第二种风格?

Rob*_*vey 6

如果您在ASP.NET MVC或Web服务中编写Web应用程序,则每次都会重新创建DataContext,因为应用程序在页面GET和POST之间是"无状态"的.

如果您正在编写Winforms或WPF应用程序,您可以以相同的方式执行此操作,尽管保持DataContext打开可以更容易,因为Winforms应用程序是有状态的(即您有一个容器可以存活DataContext).

通常,每次需要完成"工作单元"时打开DataContext可能是明智的. DataContext本身相当轻量级,因此为每个"事务"打开一个并不是什么大不了的事.这种做法也与企业应用程序中的软件层(即数据库,DAL,服务层,存储库等)一致,并有助于强制在必要层之间分离关注点.