Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq和数据上下文_C#_Linq_Datacontext - Fatal编程技术网

C# Linq和数据上下文

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

每个应用程序只有一个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
为单例将导致内部缓存增加,然后导致内存泄漏

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

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

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

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

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