c# - Linq to SQL DataContext 的多个/单个实例

标签 c# linq-to-sql

我有一个项目,其中包含许多不同的类,用于查询和修改一组通用表中的数据。我已经设置了一个 .dbml 文件,它为我们提供了一个 DataContext 类。我的问题是 DataContext 的单个实例是否应该由所有对象使用,或者多个实例是否可以安全使用。我还想知道在单个 DataContext 的情况下的线程安全性,以及是否应该同步对其方法的访问。

最佳答案

Rick Strahl 有一篇关于您的选择的好文章:http://www.west-wind.com/weblog/posts/246222.aspx .

另请参阅:LINQ to SQL - where does your DataContext live? .

您可能需要针对每种类型的部署(Web、桌面、Windows 服务......)略有不同的策略......

总而言之,您的选择是:

  • Global DataContext - 在多线程环境(包括网络应用程序)中很危险。请记住,不保证实例成员是线程安全的(来自上面 Bradley Grainger 的 answer)。
  • 每个线程的 DataContext - 复杂。如果您的 DataContext 正在跟踪更改,您必须确保在适当的时间刷新它们。实例化、存储和检索 DataContext 很痛苦。
  • DataContext 每个原子操作 - 您失去了跟踪更改的能力,因为一个 DataContext 创建一个对象而另一个更新或删除它。将数据对象附加到新的 DataContext 可能不会像您预期的那样工作。
  • 每个数据对象的 DataContext - 似乎不够优雅,因为您必须在实例化(创建和附加)和更新/删除(将其从数据对象中取出并使用它)时大惊小怪。

我为每个数据对象选择了一个 DataContext。它可能不是最出色的解决方案,但它适用于所有部署环境。

关于c# - Linq to SQL DataContext 的多个/单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/226127/

相关文章:

c# - Regex.Split 表现出奇怪的行为

c# - 如何从 .mov 视频文件头(QuickTime 文件格式)中读取比特率信息?

c# - 扩展方法对子类不起作用?

c# - linq 连接错误

c# - 如何编写 LINQ to SQL 查询以获取今天的日期记录?

c# - EXCEPT 运算符是否可以排除列包含数组中数据的数据

vb.net - LINQ to SQL 无法将 Int32 转换为 String - 这怎么可能?

c# - 在 Visual Studio 2010 中引用 mscorlib

c# - Linq-to-SQL 的开销

c# - 以编程方式从 DataTable 创建 SQL Server CE 表