C# 静态DataContext线程安全吗?

C# 静态DataContext线程安全吗?,c#,entity-framework,C#,Entity Framework,我知道公认的做法是在工作单元模式中使用DataContext,但我在MSDN中遇到了以下声明: 此类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的。任何实例成员都不能保证线程安全 正如我所读到的,如果DataContext被声明为静态的,那么它是线程安全的 不,那是不对的 这意味着DataContext本身的静态成员是线程安全的,而不是它的静态实例 注意,这几乎是.NET中大多数类的标准。(允许在“most”的含义上存在分歧)。我没有立即发现任何DataContext的静

我知道公认的做法是在工作单元模式中使用DataContext,但我在MSDN中遇到了以下声明:

此类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的。任何实例成员都不能保证线程安全

正如我所读到的,如果DataContext被声明为静态的,那么它是线程安全的

不,那是不对的

这意味着
DataContext
本身的静态成员是线程安全的,而不是它的静态实例

注意,这几乎是.NET中大多数类的标准。(允许在“most”的含义上存在分歧)。我没有立即发现任何
DataContext

的静态成员,相反

实例成员不是线程安全的。但您将从同一共享实例访问实例成员


但即使对象是线程安全的,也要考虑一级缓存不断增长对长期存在的数据上下文的影响。很少的线程和几十个/数百个/数千个并发调用,您的实例可能会耗尽内存。相反,您应该在对象完成其工作后处理它。

不,它不是。不要那样做。也;数据上下文应该是短活动的。实例是否定义为静态并不定义它是否是线程安全的。要么代码是线程安全的,要么不是,句号。现在,如果引用是静态的,那么底层对象是线程安全的当然很重要,因为可能有多个线程使用它;从技术上讲,它不是
DataContext
的静态成员-它是从
DataContext
派生的类的静态成员。现在还不清楚您将如何将其链接到实例,也不能免除您实现线程安全性的需要。我是根据您的评论“DataContext本身的静态成员是线程安全的,而不是它的静态实例”,所以我应该能够创建DataContext(这是一个objectset和一个类成员变量,应该是线程安全的)@gregbarey是静态的并不意味着任何本质上是线程安全的;它只是一种约定,静态方法在线程安全的庄园中编写,除非另有说明,否则实例方法不会是线程安全的。由于这种约定,您引用的行基本上是复制粘贴到几乎所有类型的文档页面上在C#中,除了少数几个不遗余力地实现线程安全的类(即
System.Collections.Concurrent
中的类)。因此,您获取某个实例并将其设置为静态并没有帮助。@GregBarey基本上是这样。但请记住,您从
DataContext
添加到派生类中的静态成员不是
DataContext
的成员。