Entity framework 处理对象上下文的首选模式
在Azure worker角色中,建议使用以下哪种模式来处理objectcontext。另外,使用这两种模式会以不同的方式影响连接池吗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.
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();
}
}