Linq to sql LINQ到SQL数据上下文保持打开状态需要多长时间?

Linq to sql LINQ到SQL数据上下文保持打开状态需要多长时间?,linq-to-sql,Linq To Sql,我是LinqtoSQL(以及sql)的新手,我已经开始收集证据,证明我做事情的方式可能不正确,所以我想看看大家都有什么要说的 在我的员工分配应用程序中,我允许用户在员工和项目之间创建工作分配。在应用程序开始时,我将linq to sql数据上下文打开到我的管理数据库。在整个程序中,我从不放弃数据上下文。事实上,大多数表单构造函数都将此数据上下文作为其参数之一 我有点认为这是一种方法,直到我阅读了另一个SO问题,提问者在他的程序中反复讨论重新创建数据上下文,然后根据需要将实体“附加”到新的数据上下

我是LinqtoSQL(以及sql)的新手,我已经开始收集证据,证明我做事情的方式可能不正确,所以我想看看大家都有什么要说的

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

我有点认为这是一种方法,直到我阅读了另一个SO问题,提问者在他的程序中反复讨论重新创建数据上下文,然后根据需要将实体“附加”到新的数据上下文。这将有助于我解决我一直遇到的问题,即一些东西正在“潜入”我的数据库


那么,您将在哪里使用第一种样式(不要羞于说从不),在哪里使用第二种样式呢?

如果您在ASP.NET MVC或web服务中编写web应用程序,那么每次都将重新创建DataContext,因为该应用程序在页面获取和发布之间是“无状态”的

如果您正在编写Winforms或WPF应用程序,也可以用同样的方法来编写,尽管保持DataContext打开会更容易,因为Winforms应用程序是有状态的(即,您有一个DataContext容器可供使用)


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

如果您在ASP.NET MVC或web服务中编写web应用程序,则每次都将重新创建DataContext,因为应用程序在页面获取和发布之间是“无状态”的

如果您正在编写Winforms或WPF应用程序,也可以用同样的方法来编写,尽管保持DataContext打开会更容易,因为Winforms应用程序是有状态的(即,您有一个DataContext容器可供使用)


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

通常推荐的做法是为每个原子操作创建新的数据上下文。DataContext的实例化成本非常低,非常适合快速转换

一般来说,我倾向于实例化DataContext,执行CRUD操作,然后再次处理它。这可能是单个实体的更新,或插入大量对象。做对你的场景最有意义的事情

如果要从上下文中传递实体,请务必小心,因为如果尝试枚举或检索相关数据,将引发异常-最好将LINQ实体转换为独立对象(例如,可以将Person LINQ实体转换为PersonResult,由解决方案的逻辑层使用)


希望有帮助!

通常推荐的做法是为每个原子操作创建一个新的DataContext。DataContext的实例化成本非常低,非常适合快速转换

作为一般的经验法则,我倾向于实例化DataContext,执行CRUD操作,然后再次处理它。这可能是更新单个实体,或者插入一堆对象。做任何对您的场景最有意义的事情

如果要从上下文中传递实体,请务必小心,因为如果尝试枚举或检索相关数据,将引发异常-最好将LINQ实体转换为独立对象(例如,可以将Person LINQ实体转换为PersonResult,由解决方案的逻辑层使用)

希望有帮助