C# Linq和数据上下文
每个应用程序只有一个DataContext并通过单个应用程序共享,这样可以吗 我问这个问题是因为我想在每种形式中都使用DataContext,但我意识到,如果我在一个DataContext中更改了一些enity,我必须刷新它(如果以前使用过) 例如表格1:C# Linq和数据上下文,c#,linq,datacontext,C#,Linq,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
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
为单例将导致内部缓存增加,然后导致内存泄漏
最佳实践是DataContext的生存期应为每个线程,大多数IoC容器都支持这一点,只需选择一个并使用
DataContext
不是线程安全的,因此您可能使用静态构造函数或Lazy
实现了ad-safe单例。当使用DataContext
作为单例时,DataContext
是使用内部缓存的工作单元模式实现的,内部缓存的目的是避免往返数据库和跟踪更改。保持DataContext
为单例将导致内部缓存增加,然后导致内存泄漏
最佳实践是DataContext的生存期应为每个线程,大多数IoC容器都支持这一点,只需选择一个并使用
DataContext
不是线程安全的,因此您可能使用静态构造函数或Lazy