2011-10-11 35 views
3

OrganizationServiceProxy和OrganizationServiceContext都支持dispose方法。我是否需要在使用语句中包装它们两个?我是否需要处理CRM OrganizationServiceProxy和OrganizationServiceContext?

using (var proxy = GetOrganizationServiceProxy(Constants.OrgName)) 
{ 
    using (var context = new OrganizationServiceContext(proxy)) 
    { 
     // Linq Code Here 
    } 
} 

或者会处理上下文关闭正常关闭代理,意味着只有这是必需的?

var proxy = GetOrganizationServiceProxy(Constants.OrgName) 
using (var context = new OrganizationServiceContext(proxy)) 
{ 
    // Linq Code Here 
} 

回答

6

上下文不能处理代理,因为它无法确定它是否被任何其他对象使用。 如果单看OrganizationServiceContext的Dispose,你会看到

public void Dispose() 
{ 
    this.Dispose(true); 
    GC.SuppressFinalize((object) this); 
} 

protected virtual void Dispose(bool disposing) 
{ 
    if (!disposing) 
    return; 
    this.ClearChanges(); 
} 

BTW。你可以结合使用两种语句

using (var proxy = GetOrganizationServiceProxy(Constants.OrgName)) 
using (var context = new OrganizationServiceContext(proxy)) 
{ 
    // Linq Code Here 
} 
+0

我喜欢double using语句。这是个好主意。假设我可以创建一个“上下文管理器”来处理两者,如果我真的想要一个使用语句。谢谢! – Daryl

+0

@Daryl肯定你可以创建一些经理类。但是,如果您同时添加这两个用途,则明确该任务需要哪些依赖关系 – ccellar

相关问题