コード例 #1
0
 //----------------------------------------------------------
 private CResultAErreur MiseAjour(CMemoryDb sourceDB, bool bUpdateOnly)
 {
     foreach (DataTable table in sourceDB.Tables)
     {
         if (!bUpdateOnly || Tables[table.TableName] != null)
         {
             Type tp = sourceDB.GetTypeForTable(table.TableName);
             if (tp != null)
             {
                 GetTable(tp);
             }
         }
     }
     EnforceConstraints = false;
     foreach (DataTable table in sourceDB.Tables)
     {
         if (Tables.Contains(table.TableName))
         {
             table.BeginLoadData();
             Type tp = sourceDB.GetTypeForTable(table.TableName);
             foreach (DataRow row in table.Rows)
             {
                 if (!bUpdateOnly || Tables[table.TableName].Rows.Find(row[table.PrimaryKey[0]]) != null)
                 {
                     CEntiteDeMemoryDb entite = Activator.CreateInstance(tp, new object[] { row }) as CEntiteDeMemoryDb;
                     ImporteObjet(entite, false, false);
                 }
             }
             table.EndLoadData();
         }
     }
     EnforceConstraints = true;
     return(CResultAErreur.True);
 }
コード例 #2
0
        //----------------------------------------------------------------
        public CListeEntitesDeMemoryDbBase(CMemoryDb db, Type typeElements)
        {
            m_database     = db;
            m_typeElements = typeElements;
            CEntiteDeMemoryDb entite = Activator.CreateInstance(typeElements, new object[] { db }) as CEntiteDeMemoryDb;

            m_strSortOrder = entite.GetChampTriParDefaut();
        }
コード例 #3
0
        //----------------------------------------------------
        public CEntiteDeMemoryDb ImporteObjet(
            CEntiteDeMemoryDb valeur,
            bool bAvecFils,
            bool bMiseAJourElementsExistants)
        {
            HashSet <string> elementsDejaImportés = new HashSet <string>();

            return(ImporteObjet(valeur, bAvecFils, bMiseAJourElementsExistants, elementsDejaImportés));
        }
コード例 #4
0
        //----------------------------------------------------------
        public CResultAErreur RemoveEntite(Type tp, string strId)
        {
            CResultAErreur    result = CResultAErreur.True;
            CEntiteDeMemoryDb entite = Activator.CreateInstance(tp, new object[] { this }) as CEntiteDeMemoryDb;

            if (entite != null && entite.ReadIfExist(strId))
            {
                result = entite.Delete();
            }
            return(result);
        }
コード例 #5
0
        //----------------------------------------------------------
        public CEntiteDeMemoryDb GetElementFromFournisseurSupplementaire(Type tp, string strId)
        {
            List <IFournisseurElementsManquantsPourMemoryDb> lst = null;

            if (m_fournisseursSupplementairesElements.TryGetValue(tp, out lst))
            {
                foreach (IFournisseurElementsManquantsPourMemoryDb fournisseur in lst)
                {
                    CEntiteDeMemoryDb entite = fournisseur.GetEntite(tp, strId, this);
                    if (entite != null)
                    {
                        return(entite);
                    }
                }
            }
            return(null);
        }
コード例 #6
0
        //----------------------------------------------------------
        public CResultAErreur UpdateEntite(CEntiteDeMemoryDb entite)
        {
            CResultAErreur result = CResultAErreur.True;

            if (entite.Database != this)
            {
                try
                {
                    ImporteObjet(entite, true, true);
                }
                catch (Exception e)
                {
                    result.EmpileErreur(new CErreurException(e));
                }
            }
            return(result);
        }
コード例 #7
0
        //----------------------------------------------------------------
        public CEntiteDeMemoryDb GetEntity(CMemoryDb contexteMemoire)
        {
            CEntiteDeMemoryDb entite = (CEntiteDeMemoryDb)Activator.CreateInstance(m_typeObjet, new object[] { contexteMemoire });

            foreach (object cle in m_cles)
            {
                try
                {
                    string strId = (string)cle;
                    if (entite.ReadIfExist(strId))
                    {
                        return(entite);
                    }
                }
                catch
                {
                    continue;
                }
            }

            return(null);
        }
コード例 #8
0
 //--------------------------------------------
 public CValiseEntiteDeMemoryDb(CEntiteDeMemoryDb entite)
 {
     m_entite = entite;
 }
コード例 #9
0
 public CReferenceEntiteMemoryDb(CEntiteDeMemoryDb entite)
 {
     m_typeObjet = entite.GetType();
     m_cles      = new object[] { entite.Id };
 }
コード例 #10
0
        //----------------------------------------------------
        public CEntiteDeMemoryDb ImporteObjet(
            CEntiteDeMemoryDb valeur,
            bool bAvecFils,
            bool bMiseAJourElementsExistants,
            HashSet <string> elementsDejaImportés)
        {
            bool bOldEnforceConstrainte = EnforceConstraints;

            try
            {
                EnforceConstraints = false;

                DataTable table = GetTable(valeur.GetType());
                if (elementsDejaImportés.Contains(valeur.ObjectKey))
                {
                    DataRow row = table.Rows.Find(valeur.Id);
                    if (row == null)
                    {
                        return(null);
                    }
                    return(Activator.CreateInstance(valeur.GetType(), new object[] { row }) as CEntiteDeMemoryDb);
                }
                DataRow rowExistante = table.Rows.Find(valeur.Id);
                if (rowExistante != null && !(bool)rowExistante[c_champIsToRead] && !bMiseAJourElementsExistants)
                {
                    return(Activator.CreateInstance(valeur.GetType(), new object[] { rowExistante }) as CEntiteDeMemoryDb);
                }

                elementsDejaImportés.Add(valeur.ObjectKey);
                foreach (PropertyInfo info in valeur.GetType().GetProperties())
                {
                    object[] attrs = info.GetCustomAttributes(typeof(MemoryParentAttribute), true);
                    if (attrs != null && attrs.Length > 0)
                    {
                        MemoryParentAttribute parentAtt = attrs[0] as MemoryParentAttribute;
                        string strChampFils             = parentAtt.NomChampFils;
                        if (strChampFils == "")
                        {
                            CEntiteDeMemoryDb entite = Activator.CreateInstance(info.PropertyType, new object[] { this }) as CEntiteDeMemoryDb;
                            strChampFils = entite.GetChampId();
                        }
                        CEntiteDeMemoryDb parent = valeur.GetParent(info.PropertyType, strChampFils);
                        if (parent != null)
                        {
                            ImporteObjet(parent, true, bMiseAJourElementsExistants, elementsDejaImportés);
                        }
                    }
                }

                if (rowExistante == null)
                {
                    table.ImportRow(valeur.Row.Row);
                }
                else
                {
                    if ((bool)valeur.Row.Row[c_champIsToRead] || bMiseAJourElementsExistants)
                    {
                        foreach (DataColumn col in valeur.Row.Row.Table.Columns)
                        {
                            if (table.Columns.Contains(col.ColumnName))
                            {
                                rowExistante[col.ColumnName] = valeur.Row.Row[col.ColumnName];
                            }
                        }
                    }
                }

                if (bAvecFils)
                {
                    foreach (DataRelation dr in valeur.Database.Relations)
                    {
                        if (dr.ParentTable.TableName == table.TableName)
                        {
                            Type tpFils = valeur.Database.GetTypeForTable(dr.ChildTable.TableName);
                            if (tpFils != null)
                            {
                                PropertyInfo prop = tpFils.GetProperty(dr.ExtendedProperties[c_ExtPropRelationNomProprieteFils].ToString());
                                if (prop != null)
                                {
                                    object[] attrs = prop.GetCustomAttributes(typeof(MemoryParentAttribute), true);
                                    if (attrs != null && attrs.Length > 0)
                                    {
                                        MemoryParentAttribute parentAtt = attrs[0] as MemoryParentAttribute;
                                        if (parentAtt.IsComposition)
                                        {
                                            Type        tpListe     = typeof(CListeEntitesDeMemoryDb <>);
                                            Type        tpListeType = tpListe.MakeGenericType(tpFils);
                                            IEnumerable lst         = Activator.CreateInstance(tpListeType, new object[] { valeur.Database, new CFiltreMemoryDb(dr.ChildColumns[0].ColumnName + "=@1", valeur.Id) }) as IEnumerable;
                                            foreach (CEntiteDeMemoryDb entite in lst)
                                            {
                                                ImporteObjet(entite, bAvecFils, bMiseAJourElementsExistants, elementsDejaImportés);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                return(Activator.CreateInstance(valeur.GetType(), new object[] { table.Rows.Find(valeur.Id) }) as CEntiteDeMemoryDb);
            }
            finally
            {
                EnforceConstraints = bOldEnforceConstrainte;
            }
        }
コード例 #11
0
        //---------------------------------------
        private string GetNomTable(Type tp)
        {
            CEntiteDeMemoryDb entite = Activator.CreateInstance(tp, new object[] { this }) as CEntiteDeMemoryDb;

            return(entite.GetNomTable());
        }