/// ///////////////////////////////////////////////////////////////
        private CResultAErreur ReadObjetEtDependances(CObjetDonneeAIdNumeriqueAuto source)
        {
            CResultAErreur result = CResultAErreur.True;

            //Charge tous les parents et tous les fils
            foreach (CInfoRelation relation in CContexteDonnee.GetListeRelationsTable(source.GetNomTable()))
            {
                //Relation parente
                if (relation.TableFille == source.GetNomTable())
                {
                    CObjetDonneeAIdNumeriqueAuto parent = (CObjetDonneeAIdNumeriqueAuto)source.GetParent(relation.ChampsFille[0],
                                                                                                         CContexteDonnee.GetTypeForTable(relation.TableParente));
                    if (parent != null)
                    {
                        parent.AssureData();
                    }
                }
                else
                {
                    if (relation.Composition)
                    {
                        CListeObjetsDonnees liste = source.GetDependancesListe(relation.TableFille, relation.ChampsFille[0]);
                        foreach (CObjetDonneeAIdNumeriqueAuto objetFils in liste)
                        {
                            objetFils.AssureData();
                            ReadObjetEtDependances(objetFils);
                        }
                    }
                }
            }
            return(result);
        }
        /// ///////////////////////////// ///////////////////////////// //////////////////////////
        /// <summary>

        /// </summary>
        /// <param name="rowSource"></param>
        /// <param name="objetDest"></param>
        /// <param name="interfaceMapping"></param>
        /// <returns></returns>
        private CResultAErreur ImporteObjet(DataRow rowSource, CObjetDonneeAIdNumeriqueAuto objetDest, IInterfaceImportObjetDonnee interfaceMapping)
        {
            CResultAErreur result = CResultAErreur.True;

            rowSource[objetDest.GetChampId()] = objetDest.Id;
            rowSource[c_colIsMappe]           = true;

            //Mappe les parents de l'objet dest
            foreach (DataRelation relation in rowSource.Table.ParentRelations)
            {
                DataRow rowParente = rowSource.GetParentRow(relation);
                if (rowParente != null && !(bool)rowParente[c_colIsMappe])
                {
                    CObjetDonneeAIdNumeriqueAuto objetParent = null;
                    CListeObjetsDonnees          liste       = new CListeObjetsDonnees(objetDest.ContexteDonnee, CContexteDonnee.GetTypeForTable(relation.ParentTable.TableName));
                    result = interfaceMapping.MapObjet(rowParente, liste, ref objetParent);
                    if (!result)
                    {
                        return(result);
                    }
                    if (objetParent != null)
                    {
                        rowParente[objetParent.GetChampsId()[0]] = objetParent.Id;
                    }
                    else
                    {
                        rowSource[relation.ChildColumns[0]] = DBNull.Value;
                    }
                    rowParente[c_colIsMappe] = true;

                    objetDest.SetParent(relation.ChildColumns[0].ColumnName, objetParent);
                }
            }
            objetDest.AssureData();
            DataTable tableDest   = objetDest.Table;
            DataTable tableSource = rowSource.Table;


            //Copie les données
            objetDest.ContexteDonnee.CopyRow(rowSource, objetDest.Row.Row,
                                             objetDest.GetChampId(), CSc2iDataConst.c_champIdSynchro, CContexteDonnee.c_colLocalKey,
                                             CContexteDonnee.c_colIsToRead, CContexteDonnee.c_colIsFromDb);

            //Convertit les données binaires
            foreach (DataColumn colDest in tableDest.Columns)
            {
                if (colDest.DataType == typeof(CDonneeBinaireInRow))
                {
                    DataColumn colSource = tableSource.Columns[colDest.ColumnName];
                    if (colSource != null && colSource.DataType == typeof(string))
                    {
                        object donneesSource = rowSource[colDest.ColumnName];
                        if (donneesSource != DBNull.Value)
                        {
                            CStringSerializer serializer = new CStringSerializer((string)donneesSource, ModeSerialisation.Lecture);
                            byte[]            data       = null;
                            serializer.TraiteByteArray(ref data);
                            CDonneeBinaireInRow donneeBinaire = new CDonneeBinaireInRow(objetDest.ContexteDonnee.IdSession,
                                                                                        objetDest.Row.Row, colDest.ColumnName);
                            if (data.Length == 0)
                            {
                                donneeBinaire.Donnees = null;
                            }
                            else
                            {
                                donneeBinaire.Donnees = data;
                            }
                        }
                    }
                }
            }

            //Mappe les fils
            foreach (DataRelation relation in rowSource.Table.ChildRelations)
            {
                DataRow[] rowsFilles = rowSource.GetChildRows(relation);
                CObjetDonneeAIdNumeriqueAuto[] objetsFilles = new CObjetDonneeAIdNumeriqueAuto[rowsFilles.Length];
                int nIndex = 0;
                CListeObjetsDonnees listeFilles = objetDest.GetDependancesListe(relation.ChildTable.TableName, relation.ChildColumns[0].ColumnName);
                if (listeFilles.Count != 0)
                {
                    string strExclus = "";
                    foreach (DataRow rowFille in rowsFilles)
                    {
                        CObjetDonneeAIdNumeriqueAuto objetFils = null;
                        result = interfaceMapping.MapObjet(rowFille, listeFilles, ref objetFils);
                        if (!result)
                        {
                            return(result);
                        }
                        objetsFilles[nIndex] = objetFils;
                        if (objetFils != null)
                        {
                            if (strExclus.Length != 0)
                            {
                                strExclus += ",";
                            }
                            strExclus         += objetFils.Id.ToString();
                            listeFilles.Filtre = new CFiltreData(objetFils.GetChampId() + " not in (" + strExclus + ")");
                        }
                        nIndex++;
                    }
                }

                nIndex = 0;
                foreach (DataRow rowFille in rowSource.GetChildRows(relation))
                {
                    CObjetDonneeAIdNumeriqueAuto objetFille = objetsFilles[nIndex];
                    if (objetFille == null)
                    {
                        objetFille = (CObjetDonneeAIdNumeriqueAuto)Activator.CreateInstance(
                            CContexteDonnee.GetTypeForTable(relation.ChildTable.TableName),
                            new object[] { objetDest.ContexteDonnee });
                        objetFille.CreateNewInCurrentContexte();
                    }
                    result = ImporteObjet(rowFille, objetFille, interfaceMapping);
                    if (!result)
                    {
                        return(result);
                    }
                    rowFille[c_colIsMappe] = true;
                    nIndex++;
                }
            }
            return(result);
        }