public List <TEntity> GetAll()
        {
            if (WorkOnTheMap == true)
            {
                BringInstruction();
            }

            if (CategoryMapOption == true)
            {
                ca.UpdateList(ExternalLocation);

                DEntity d     = new DEntity();
                Envoy   envoy = new Envoy();

                d.Name           = SetName;
                d.Root           = SetRoot;
                d.TargetLocation = ExternalLocation;

                TEntity t = new TEntity();

                List <TEntity> allList = new List <TEntity>();

                if (ca.s.Count > 0)
                {
                    foreach (var item in ca.s)
                    {
                        d.CategorizeName = item.Name;
                        d = envoy.Before(t, d);
                        foreach (var item2 in envoy.DataToList <TEntity>(d))
                        {
                            allList.Add(item2);
                        }
                    }
                }
                else // Tekil dosyalar için önemli
                {
                    d = envoy.Before(t, d);
                    foreach (var item2 in envoy.DataToList <TEntity>(d))
                    {
                        allList.Add(item2);
                    }
                }
                return(allList);
            }
            else
            {
                return(null);
            }
        }
        public List <TEntity> GetCategorized(string categorizedName)
        {
            if (WorkOnTheMap == true)
            {
                BringInstruction();
            }

            DEntity d     = new DEntity();
            Envoy   envoy = new Envoy();

            d.Name           = SetName;
            d.Root           = SetRoot;
            d.CategorizeName = categorizedName;
            d.TargetLocation = ExternalLocation;

            TEntity t = new TEntity();

            d = envoy.Before(t, d);
            return(envoy.DataToList <TEntity>(d));
        }
        public void Delete(TEntity e)
        {
            if (WorkOnTheMap == true)
            {
                BringInstruction();
            }

            DEntity d     = new DEntity();
            Envoy   envoy = new Envoy();

            if (!(_categoryProperty is null))
            {
                d.CategorizeName = CategoryProperty;
            }

            d.Name           = SetName;
            d.Root           = SetRoot;
            d.TargetLocation = ExternalLocation;

            d = envoy.Before(e, d);
            envoy.DataDelete(e, d);
        }
        public void Add(TEntity e)
        {
            if (WorkOnTheMap == true)
            {
                BringInstruction();
            }

            Envoy   envoy = new Envoy();
            DEntity d     = new DEntity();

            if (!(_categoryProperty is null))
            {
                d.CategorizeName = CategoryProperty;
            }

            d.Name           = SetName;
            d.Root           = SetRoot;
            d.TargetLocation = ExternalLocation;

            sa.Create(ExternalLocation, e.GetType());

            sa.UpdateList(ExternalLocation);

            EStatus st = sa.IsThereAny(e.GetType().Name);

            if (AutomaticIdOnAdd)
            {
                e.GetType().GetProperty(envoy.FindKey(e)).SetValue(e, st.Recent + 1);
            }

            bool IsAdded  = false;
            bool IsDefine = false;

            if (CheckBeforeAdding) // Eklemeden önce kategori kontrol etme durumu
            {
                ca.UpdateList(ExternalLocation);
                if (ca.IsThereAny(d.CategorizeName) == true)
                {
                    d = envoy.Before(e, d);
                    envoy.CreateIfNotThere(d);
                    envoy.DataInsert(e, d);

                    IsAdded  = true;
                    IsDefine = true;
                }
                else
                {
                    // Şarta bağlı kılınarak ekleme durumu tanımlanmış.
                    // Ancak hangi property üzerinden çalışılacağı söylenmediğinde,
                    // Ekleme yapılmaz. Çünkü seçenek açıktır ve durum verilmemiştir.
                }
            }
            else
            {
                d = envoy.Before(e, d);
                envoy.CreateIfNotThere(d);
                envoy.DataInsert(e, d);

                IsAdded  = true;
                IsDefine = true;
            }

            if (CategoryMapOption && IsDefine) // Haritaya kategorileri ekleyen kısım
            {
                if (!string.IsNullOrWhiteSpace(d.CategorizeName))
                {
                    ca.Add(ExternalLocation, d.CategorizeName);
                }
            }

            // Define hakkında;
            // CheckBeforeAdding açık olmasına rağmen, listede bulunamadığında, CategoryMapOption açık olduğunda
            // Yine de Map'e ekleme oluşuyor. Kısaca; CBE bloğunda ki else kısmı burayı etkilemiyor.
            // Bunu düzeltmek için,
            // Kontrol kapalıysa ve kontrol sonrasında kategori listede bulunmuşsa, map'e ekleme işlemi gerçekleşiyor.

            if (IsAdded && AutomaticIdOnAdd)
            {
                sa.Add(ExternalLocation, e.GetType());
            }
        }