0

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

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

例如表格1:

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

4

2 回答 2

4

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

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

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

于 2012-10-13T09:18:54.270 回答
2

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

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

DataContext不是线程安全的,所以大概您使用静态构造函数或Lazy<>

于 2012-10-13T09:24:05.097 回答