コード例 #1
0
        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());
            }
        }