Linq and DataContext


每个

应用程序只有一个 DataContext 并通过单例共享

可以吗?

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

例如表格 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 线程安全吗?

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

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

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

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

最佳做法是 DataContext 的生存期应该是每个线程,大多数 IoC 容器都支持此功能,只需选择一个并使用即可。

DataContext不是线程安全的,所以大概你使用静态构造函数或Lazy<>实现了 thead-safe 单例

最新更新