Linq和DataContext

时间:2012-10-13 09:12:48

标签: c# linq datacontext

每个应用程序只有一个DataContext可以通过单例共享吗?

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

例如form1:

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

在另一种表格上

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线程是否安全?

2 个答案:

答案 0 :(得分:3)

  

每个应用程序只有一个DataContext可以通过单例共享吗?

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

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

答案 1 :(得分:3)

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

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

DataContext不是线程安全的,因此可能是您使用静态构造函数或Lazy<>

实现了安全的单例