是否可以在asp.net中使用静态LINQtoSQLDataContext维护事务?我有一个ASP.NET应用程序,它使用LINQtoSQL来连接SQL服务器。我有一个静态类,当然它适用于应用程序级别。我在这个静态类中创建了DataContext静态对象。除此之外,我没有在应用程序中创建任何数据上下文对象。我在每个数据库操作中使用这个静态数据上下文对象的地方。那么这是否会将事务保持为每个登录用户的线程安全?注意:以下建议适用于所有实现工作单元模式的O/RM工具,例如EntityFramework的ObjectContext、DbContext、NHibernate的Session、LINQtoSQL的DataContext。LINQtoSQLDataContext不是线程安全的。您应该为每个Web请求创建(至少)1个上下文。在多个线程上重用同一个实例意味着一个线程可以调用SubmitChanges而另一个线程仍在插入新对象。如果幸运的话,DataContext将抛出异常,因为它无法持久保存更改。如果你运气不好,DataContext成功了,你就破坏了单个请求的原始性,这会导致数据库中的数据不一致。换句话说:您将拥有一个装满狗屎的数据库!除此之外,DataContext将所有对象都保存在它的缓存中,这意味着应用程序的内存消耗将不断增长,这可能会导致OutOfMemoryException(OOM)。即使您不会出现OOM,缓存中的对象也会过时,尤其是当其他应用程序或进程正在更新您的数据库时,当实体已经在内存中时您将永远看不到这些更改。最后一点,您无法回滚对DataContext所做的更改,因此当您(在某个时候)使DataContext无效(错误地)时,没有办法恢复它(除了创建一个全新的DataContext).在这种情况下,您的AppDomain注定失败。您决定使用单个DataContext对象并不是最佳选择。在需要时创建它们(交易)。http://www.west-wind.com/weblog/posts/246222.aspx以上是C#学习教程:是否可以在asp.net中使用静态LINQtoSQLDataContext维护事务?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
