.net 具有OptimizergImport的导入组织引发InvalidOperationException

.net 具有OptimizergImport的导入组织引发InvalidOperationException,.net,active-directory,dynamics-crm,dynamics-crm-4,.net,Active Directory,Dynamics Crm,Dynamics Crm 4,使用OptimizeOrgImport=1导入组织时是否存在一些陷阱?这种优化在内部是如何工作的 用例: 导入组织,称为“测试”。(工程罚款) 导入此组织的另一个副本,如“test2”(更新用户时失败) 设置OptimizergImport=0并导入“test2”(再次优化!) 步骤2的日志: 14:46:22| Info| Import Organization (test2) 14:46:22| Info| Update Organization... 14:48:20| Inf

使用OptimizeOrgImport=1导入组织时是否存在一些陷阱?这种优化在内部是如何工作的

用例:

  • 导入组织,称为“测试”。(工程罚款)
  • 导入此组织的另一个副本,如“test2”(更新用户时失败)
  • 设置OptimizergImport=0并导入“test2”(再次优化!)
  • 步骤2的日志:

    14:46:22|   Info| Import Organization (test2)
    14:46:22|   Info| Update Organization...
    14:48:20|   Info| Update Users...
    14:48:44|  Error| Import Organization (Name=test2, Id=5b6bf441-650c-e211-b194-00185d111162) failed with Exception:
    System.InvalidOperationException: ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.
       at System.Data.SqlClient.SqlConnection.GetOpenConnection(String method)
       at System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command)
       at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
       at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
       at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
       at Microsoft.Crm.CrmDbConnection.InternalExecuteNonQuery(IDbCommand command)
       at Microsoft.Crm.CrmDbConnection.ExecuteNonQuery(IDbCommand command, Boolean impersonate)
       at Microsoft.Crm.CrmDbConnection.SetTransactionIsolationLevel(IsolationLevel il)
       at Microsoft.Crm.CrmDbConnection.Dispose(Boolean disposing)
       at Microsoft.Crm.SqlExecutionContext.Dispose(Boolean disposing)
       at Microsoft.Crm.SqlExecutionContext.Dispose()
       at Microsoft.Crm.Tools.Admin.ImportOrganizationInstaller.Import(Guid organizationId, String organizationUniqueName, String organizationFriendlyName, String sqlServerName, String databaseName, Uri reportServerUrl, String privilegedUserGroupName, String sqlAccessGroupName, String userGroupName, String reportingGroupName, String privilegedReportingGroupName, ICollection`1 users, MultipleTenancy multipleTenancy)
    
    感谢您的支持。

    将OptimizergImport设置设置为1时,您必须考虑以下因素:

    当您使用注册表项时 优化导入 并将此项的值设置为1,您不能多次导入同一组织数据库。如果要多次导入同一组织数据库,必须执行以下操作之一:

    • 设置OptimizergImport=0并使用正常导入过程
    • 删除该组织,然后再次导入该组织

    每个组织数据库都包含一个表
    [dbo].[OrganizationBase]
    。其中一列是
    OrganizationId
    。此GUID将标识组织

    如果您在CRM环境产品上备份组织数据库,并在CRM环境测试中还原,它将保留其ID。如果您稍后还原测试2,它的ID与您先前导入的ID相同

    OptimizergImport是在Rollup 8中引入的,并引入了一个新的导入过程。我假设旧的导入过程(OptimizeOrgImport=0)也会更改组织的ID。因此,旧的导入过程不会出现问题。

    将OptimizergImport设置设置为1时,必须考虑以下因素:

    当您使用注册表项时 优化导入 并将此项的值设置为1,您不能多次导入同一组织数据库。如果要多次导入同一组织数据库,必须执行以下操作之一:

    • 设置OptimizergImport=0并使用正常导入过程
    • 删除该组织,然后再次导入该组织

    每个组织数据库都包含一个表
    [dbo].[OrganizationBase]
    。其中一列是
    OrganizationId
    。此GUID将标识组织

    如果您在CRM环境产品上备份组织数据库,并在CRM环境测试中还原,它将保留其ID。如果您稍后还原测试2,它的ID与您先前导入的ID相同


    OptimizergImport是在Rollup 8中引入的,并引入了一个新的导入过程。我假设旧的导入过程(OptimizeOrgImport=0)也会更改组织的ID。因此,旧的导入流程不会有问题。

    谢谢,我也在场:)但我真的不知道如何定义两个组织是否相同。也许他们有相同的名字或其他东西。@2你可以再写一份。我想它是从转储中恢复的。因此,源和它的所有恢复的dbs都是相同的。另一种情况是:1。将组织数据库复制到testDb1。2.将组织数据库(一段时间后)复制到testDb2。3.将组织作为“test1”从testDb1导入测试环境。4.将组织作为“test2”从testDb2导入测试环境。它应该起作用吗?为什么不呢?你能解释一下吗?@2可以看编辑。如果它不能解释所有问题,请考虑编辑您的原始问题谢谢。还有一个问题:是否有一些关于dynamics crm内部结构的书籍或文章?谢谢,我也在:)但我真的不明白如何定义两个组织是否相同。也许他们有相同的名字或其他东西。@2你可以再写一份。我想它是从转储中恢复的。因此,源和它的所有恢复的dbs都是相同的。另一种情况是:1。将组织数据库复制到testDb1。2.将组织数据库(一段时间后)复制到testDb2。3.将组织作为“test1”从testDb1导入测试环境。4.将组织作为“test2”从testDb2导入测试环境。它应该起作用吗?为什么不呢?你能解释一下吗?@2可以看编辑。如果它不能解释所有问题,请考虑编辑您的原始问题谢谢。还有一个问题:有关于dynamics crm内部的书籍或文章吗?