Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework 处理对象上下文的首选模式_Entity Framework_Entity Framework 4_Azure Sql Database_Azure Worker Roles - Fatal编程技术网

Entity framework 处理对象上下文的首选模式

Entity framework 处理对象上下文的首选模式,entity-framework,entity-framework-4,azure-sql-database,azure-worker-roles,Entity Framework,Entity Framework 4,Azure Sql Database,Azure Worker Roles,在Azure worker角色中,建议使用以下哪种模式来处理objectcontext。另外,使用这两种模式会以不同的方式影响连接池吗 public override void Run() { DatabaseObjectContext ctx = new DatabaseObjectContext() while (condition) { ctx.Dosomething(); } ctx.

在Azure worker角色中,建议使用以下哪种模式来处理objectcontext。另外,使用这两种模式会以不同的方式影响连接池吗

public override void Run()
{      
    DatabaseObjectContext ctx = new DatabaseObjectContext()                 
    while (condition)
    {
      ctx.Dosomething();   
    }
    ctx.Dispose();
} 
vs


ObjectContext不是设计为持久对象的。把它看作是工作模式单位的实现。因此,第二个选项可能更好。

ObjectContext不是设计为持久对象的。把它看作是工作模式单位的实现。因此,第二个选项可能更好。

如果我必须在这两个选项中进行选择(即,我不能或太复杂,无法实现Barlomieij所说的UoW模式),我会选择第一个选项,在最后删除ctx.Dispose(),并通过在using语句中封装所有内容来替换它。

如果我必须在这两个选项中进行选择(也就是说,正如Barlomieij所说的UoW模式,我不能或太复杂而无法实现),我会选择第一种模式,删除ctx.Dispose()最后,通过将所有内容包装在using语句中来替换它。

只是为了澄清-如果选择第一个,while条件仍将在using语句的范围内。因此实际上,这是一个datacontext的创建,对吗?否,.NET将为每个循环创建一个datacontext。包装在using语句中可以告诉您e框架认为上下文是可丢弃的,但垃圾收集器有责任销毁这些上下文(即,在某些时候,内存中可能会有所有创建的对象上下文,所有这些上下文都在等待垃圾收集)只是想澄清一下-如果选择第一个,while条件仍将在using语句的范围内。这实际上是一个datacontext的创建,对吗?不,.NET将为每个循环创建一个datacontext。在using中包装将让您告诉框架该上下文是可丢弃的,但它是垃圾收集器响应销毁这些上下文的不可用性(例如,在某些时候,内存中可能会有所有创建的对象上下文,都在等待垃圾收集)
 public override void Run()
 {                        
     while (condition)
     {
      DatabaseObjectContext ctx = new DatabaseObjectContext()  
      ctx.Dosomething();   
          ctx.Dispose();
     }
  }