Solid3d source = tr.GetObject(id, OpenMode.ForRead) as Solid3d; // id получен заранее из BTR внешней ссылки. Как ни странно транзакция не ругается на объект из чужой database
      if (source is null || source.IsNull || source.IsErased) return;
      Solid3d laid;
      if (source.Database == db) // db- это database основного чертежа
        laid = source.Clone() as Solid3d;
      else // солид получен из блока-внешней ссылки - простой клон не уберет связи с внешней БД
      {
        IdMapping map = new IdMapping();
        source.Database.WblockCloneObjects(
          new ObjectIdCollection { id },
          SymbolUtilityServices.GetBlockModelSpaceId(db), // в модель основной database
          map, DuplicateRecordCloning.Ignore, false); // получаю eWasErased
        laid = tr.GetObject(map[source.Id].Value, OpenMode.ForWrite, false, true) as Solid3d;
      }