Linq和DataContext

每个应用程序只有一个DataContext并通过单例共享它是否可以?

我问这个因为我想在每种forms都有DataContext,但我意识到,如果我在一个DataContext中更改了一些enity,我可以刷新它,如果之前使用的话。

例如form1:

db = GetContext() item=(from p in db.Table where p.id=1 select p) 

另一种forms

 db = GetContext() item=(from p in db.Table where p.id=1 select p) item.value="test" 

回到我必须做的原始表格

 db.Refresh(RefreshMode.OverwriteCurrentValues, item) 

即使我做了一个新的

 item=(from p in db.Table where p.id=1 select p) 

(没有刷新)该值将不会更新

DataContext线程是否安全?

使用DataContext作为单例时不行DataContext是使用工作单元模式实现的 ,内部缓存在里面,内部缓存的目的是避免往返数据库和更改跟踪。 将DataContext保持为单例会使内部缓存增加,从而暂时导致内存泄漏。

最佳实践是DataContext的生命周期应该是每个线程,大多数IoC容器都支持这个,只需选择一个并使用。

DataContext不是线程安全的,所以你可能是使用静态构造函数或Lazy<>实现了安全的单例。

每个应用程序只有一个DataContext并通过单例共享它是否可以?

嗯,这肯定不是它的设计 – 如果你有多个线程执行多个操作,它肯定不是一个好主意。

就像数据库连接一样,最好在需要时创建上下文,做任何你需要做的事情,然后在你需要执行一组新操作时创建一个新上下文。