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()); } }