CA2000:在丢失范围之前处置对象

时间:2014-08-04 09:44:48

标签: .net dynamics-crm code-analysis

在进行代码分析时,我在一种方法中遵循代码 它给了我关于这个代码段的消息

  

CA2000在丢失范围之前处理对象在方法中   'AddressHistory.UpdateFlagInApplicationEntity(bool)',调用   System.IDisposable.Dispose对象'new OrganizationService(“Xrm”)'   在所有引用它之前   范围。 MasterPortal AddressHistory.aspx.cs 269

我用过来解决这个问题, 但它仍然显示这条消息为'新的OrganizationService,是不是因为在使用部分我写了两个新关键字,我是否需要它单独声明?

请帮助我

if (applicationDetails.Entities.Count > 0)
{
    Guid applicationId = applicationDetails.Entities[0].Id;
    if (applicationId != null)
    {
        using (var updateContext = new OrganizationServiceContext(new OrganizationService("Xrm")))
        {
            var applicationToupdate = new Entity(ApplicationsEntity.ENTITYNAME) { Id = applicationId };
            applicationToupdate[ApplicationsEntity.SIA_SECTIONCOMPLETEDADDRESSES] = flagValue;
            updateContext.Attach(applicationToupdate);
            updateContext.UpdateObject(applicationToupdate);
            updateContext.SaveChanges();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您说您已经将usingOrganizationService实例一起使用了。请记住将该实例传递给OrganizationServiceContext构造函数,如下所示:

if (applicationDetails.Entities.Count > 0)
{
    Guid applicationId = applicationDetails.Entities[0].Id;
    if (applicationId != null)
    {
        using (var service = new OrganizationService("Xrm"))
        using (var updateContext = new OrganizationServiceContext(service))
        {
            var applicationToupdate = new Entity(ApplicationsEntity.ENTITYNAME) { Id = applicationId };
            applicationToupdate[ApplicationsEntity.SIA_SECTIONCOMPLETEDADDRESSES] = flagValue;
            updateContext.Attach(applicationToupdate);
            updateContext.UpdateObject(applicationToupdate);
            updateContext.SaveChanges();
        }
    }
}