コード例 #1
0
        private void SetColumns()
        {
            BizColumn            bizColumn = new BizColumn();
            BizTableDrivedEntity biz       = new BizTableDrivedEntity();
            var entityID = 0;

            if (lokRelationshipTail.SelectedItem == null)
            {
                entityID = EntityID;
            }
            else
            {
                EntityRelationshipTailDTO item = lokRelationshipTail.SelectedItem as EntityRelationshipTailDTO;
                entityID = item.TargetEntityID;
            }
            var entity  = biz.GetTableDrivedEntity(MyProjectManager.GetMyProjectManager.GetRequester(), entityID, EntityColumnInfoType.WithSimpleColumns, EntityRelationshipInfoType.WithoutRelationships);
            var columns = entity.Columns;  //  .Where(x => x.ForeignKey == false).ToList();

            //  برای وضعیتهایی که به دسترسی داده وصل میشن همه ستونها لازمند چون مثلا برای درخواست سرویس شناسه دفتر با شناسه خاری سازمان کاربر چک میشود. اما برای وضعیتهای فرم کلید خارجی ها کنترل نمی شوند که باعث فعال شدن اقدامات بشوند. چون داینامیک تغییر نمی کنند. البته بعهتر است برنامه تغییر کند که کلید خارجی ها با تغییر رابطه تغییر کنند.

            cmbColumns.DisplayMemberPath = "Alias";
            cmbColumns.SelectedValuePath = "ID";
            cmbColumns.ItemsSource       = columns;
            if (Message != null && Message.ID != 0)
            {
                if (Message.ColumnID != 0)
                {
                    cmbColumns.SelectedValue = Message.ColumnID;
                }
            }
        }
コード例 #2
0
 public EntityRelationshipTailDTO JoinRelationshipTail(EntityRelationshipTailDTO firstTail, EntityRelationshipTailDTO secondTail)
 {
     using (var projectContext = new DataAccess.MyProjectEntities())
     {
         var RelationshipIDPath = firstTail.RelationshipIDPath + "," + secondTail.RelationshipIDPath;
         return(ToEntityRelationshipTailDTO(projectContext, RelationshipIDPath, firstTail.InitialEntityID, firstTail.InitialiEntityAlias, secondTail.TargetEntityID, secondTail.TargetEntityAlias, null, false).Item1);
     }
 }
コード例 #3
0
        //public bool CheckRelationshipTailPermission(DR_Requester requester, EntityRelationshipTailDTO relationshipTail)
        //{
        //    BizTableDrivedEntity bizTableDrivedEntity = new MyModelManager.BizTableDrivedEntity();

        //    //اینکه وسط راه تیل انتیتی دسترسی نداشته باشد مهم نیست؟


        //    return CheckRelationshipTailRelationshipPermission(requester, relationshipTail);

        //}
        public bool DataIsAccessable(DR_Requester requester, EntityRelationshipTailDTO relationshipTailDTO)
        {
            using (var projectContext = new DataAccess.MyProjectEntities())
            {
                var relatoinshipTail = projectContext.EntityRelationshipTail.First(x => x.ID == relationshipTailDTO.ID);
                return(DataIsAccessable(requester, relatoinshipTail));
            }
        }
コード例 #4
0
 public RelationshipMenu(EntityRelationshipTailDTO entityRelationshipTail, int entityID, string entityName, string tooltip, string group1, string group2)
 {
     RelType = DataReportRelationshipType.RelationshipTail;
     EntityRelationshipTail = entityRelationshipTail;
     EntityID   = entityID;
     EntityName = entityName;
     Tooltip    = tooltip;
     Group1     = group1;
     Group2     = group2;
 }
コード例 #5
0
        //public string CheckLinkedServers(int relationshipTailID)
        //{
        //    using (var projectContext = new DataAccess.MyProjectEntities())
        //    {
        //        List<string> messages = new List<string>();
        //        var tail = projectContext.EntityRelationshipTail.First(x => x.ID == relationshipTailID);
        //        var message = CheckRelationshipTailLinkedServer(messages,tail);
        //        if (!string.IsNullOrEmpty(message))
        //            messages.Add(message);
        //    }
        //}

        //private string CheckRelationshipTailLinkedServer(List<string> messages, EntityRelationshipTail tail)
        //{
        //   if(tail.TableDrivedEntity.Table.DBSchema.DatabaseInformation.DBServerID!= tail.TableDrivedEntity.Table.DBSchema.DatabaseInformation.DBServerID !=)
        //}

        private string GetReveseRaletionshipPath(EntityRelationshipTailDTO result)
        {
            if (result.ChildTail == null)
            {
                return(result.Relationship.PairRelationshipID.ToString());
            }
            else
            {
                return(GetReveseRaletionshipPath(result.ChildTail) + "," + result.Relationship.PairRelationshipID.ToString());
            }
        }
コード例 #6
0
 private string GetEntityPath(EntityRelationshipTailDTO item)
 {
     if (item.ChildTail != null)
     {
         return(item.Relationship.Entity2 + "," + GetEntityPath(item.ChildTail));
     }
     else
     {
         return(item.Relationship.Entity2);
     }
 }
コード例 #7
0
 public string CheckRelationshipsLinkedServers(EntityRelationshipTailDTO relationshipTail)
 {
     if (relationshipTail.Relationship.ServerID1 != relationshipTail.Relationship.ServerID2 && string.IsNullOrEmpty(relationshipTail.Relationship.LinkedServer))
     {
         return("ارتباط لینک سرور برای رابطه" + " " + relationshipTail.Relationship.Alias + " " + "بین موجودیت های" + " " + relationshipTail.Relationship.Entity1Alias + " " + "و موجودیت" + " " + relationshipTail.Relationship.Entity2Alias + " " + "تعریف نشده است");
     }
     if (relationshipTail.ChildTail != null)
     {
         return(CheckRelationshipsLinkedServers(relationshipTail.ChildTail));
     }
     return("");
 }
コード例 #8
0
        private LinkedList <EntityRelationshipTailDTO> GetLinkedRelationshipTails(EntityRelationshipTailDTO firstRelationshipTail)
        {
            LinkedList <EntityRelationshipTailDTO> result = new LinkedList <EntityRelationshipTailDTO>();

            List <EntityRelationshipTailDTO> list = GetListOfRelationshipTails(firstRelationshipTail);

            foreach (var item in list)
            {
                result.AddLast(item);
            }
            return(result);
        }
コード例 #9
0
 public string CheckTailHasRelationshipWithView(EntityRelationshipTailDTO relationshipTail)
 {
     if (relationshipTail.Relationship.OtherSideIsView)
     {
         return(relationshipTail.Relationship.Entity2Alias);
     }
     else if (relationshipTail.ChildTail != null)
     {
         return(CheckTailHasRelationshipWithView(relationshipTail.ChildTail));
     }
     return("");
 }
コード例 #10
0
        public object GetValueSomeHow(EntityRelationshipTailDTO valueRelationshipTail, int valueColumnID)
        {
            if (valueRelationshipTail == null)
            {
                var proprty = GetProperty(valueColumnID);
                return(proprty?.Value);
            }
            else
            {
                DP_DataRepository relatedData = null;
                if (ParantChildRelationshipInfo != null && ParantChildRelationshipInfo.Relationship.PairRelationshipID == valueRelationshipTail.Relationship.ID)
                {
                    if (ParantChildRelationshipInfo.Relationship.PairRelationshipID == valueRelationshipTail.Relationship.ID)
                    {
                        relatedData = ParantChildRelationshipInfo.SourceData;
                    }
                }
                else if (ChildRelationshipInfos.Any(x => x.Relationship.ID == valueRelationshipTail.Relationship.ID))
                {
                    var childInfo = ChildRelationshipInfos.First(x => x.Relationship.ID == valueRelationshipTail.Relationship.ID);
                    if (childInfo.RelatedData.Count != 1)
                    {
                        throw new Exception("asav");
                    }
                    else
                    {
                        relatedData = childInfo.RelatedData.First();
                    }
                }
                if (relatedData != null)
                {
                    return(relatedData.GetValueSomeHow(valueRelationshipTail.ChildTail, valueColumnID));
                }
                else
                {
                    if (DataView != null)
                    {
                        if (DataView.Properties.Any(x => x.RelationshipIDTailPath == valueRelationshipTail.RelationshipIDPath && x.ColumnID == valueColumnID))
                        {
                            return(DataView.Properties.First(x => x.RelationshipIDTailPath == valueRelationshipTail.RelationshipIDPath && x.ColumnID == valueColumnID).Value);
                        }
                    }

                    return(null);
                }
            }
            //return "";
        }
コード例 #11
0
 private List <EntityRelationshipTailDTO> GetListOfRelationshipTails(EntityRelationshipTailDTO relationshipTail, List <EntityRelationshipTailDTO> items = null)
 {
     if (items == null)
     {
         items = new List <EntityRelationshipTailDTO>();
     }
     if (relationshipTail != null)
     {
         items.Add(relationshipTail);
         return(GetListOfRelationshipTails(relationshipTail.ChildTail, items));
     }
     else
     {
         return(items);
     }
 }
コード例 #12
0
        public string CheckLinkedServers(TableDrivedEntityDTO firstEntity, EntityRelationshipTailDTO relationshipTail)
        {
            BizDatabase bizDatabase = new BizDatabase();

            if (firstEntity.ServerID != relationshipTail.Relationship.ServerID2)
            {
                if (!bizDatabase.LinkedServerExists(firstEntity.ServerID, relationshipTail.Relationship.ServerID2))
                {
                    return("ارتباط لینک سرور بین موجودیت های" + " " + firstEntity.Alias + " " + "و موجودیت" + " " + relationshipTail.Relationship.Entity2Alias + " " + "تعریف نشده است");
                }
            }
            if (relationshipTail.ChildTail != null)
            {
                return(CheckLinkedServers(firstEntity, relationshipTail.ChildTail));
            }
            return("");
        }
コード例 #13
0
 private DP_SearchRepository CreateSearchItem(DP_SearchRepository mainItem, EntityRelationshipTailDTO searchRelationshipTail)
 {
     if (searchRelationshipTail == null)
     {
         return(mainItem);
     }
     else
     {
         var foundItem = new DP_SearchRepository(searchRelationshipTail.Relationship.EntityID2);
         foundItem.SourceRelationship = searchRelationshipTail.Relationship;
         //foundItem.SourceEntityID = searchRelationshipTail.Relationship.EntityID1;
         //foundItem.SourceToTargetRelationshipType = searchRelationshipTail.Relationship.TypeEnum;
         //foundItem.SourceToTargetMasterRelationshipType = searchRelationshipTail.Relationship.MastertTypeEnum;
         mainItem.Phrases.Add(foundItem);
         return(CreateSearchItem(foundItem, searchRelationshipTail.ChildTail));
     }
 }
コード例 #14
0
 private void SetItems(List <EntityRelationshipTailDataMenuItemsDTO> items, EntityRelationshipTailDTO childTail)
 {
     items.Add(new EntityRelationshipTailDataMenuItemsDTO()
     {
         Path = childTail.RelationshipIDPath, EntityName = childTail.Relationship.Entity1Alias, TableDrivedEntityID = childTail.Relationship.EntityID1
     });
     if (childTail.ChildTail != null)
     {
         SetItems(items, childTail.ChildTail);
     }
     else
     {
         items.Add(new EntityRelationshipTailDataMenuItemsDTO()
         {
             Path = "", EntityName = EntityRelationshipTail.TargetEntityAlias, TableDrivedEntityID = EntityRelationshipTail.TargetEntityID
         });
     }
 }
        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            EntityRelationshipTailDTO dto = new EntityRelationshipTailDTO();
            List <RelationshipDTO>    listRelationships = new List <RelationshipDTO>();
            var relationshipFound = GetCheckedNode(listRelationships);

            if (relationshipFound)
            {
                //var targetEntityID = listRelationships.First().EntityID2;
                //    dto = ConvertRelationshipPath(listRelationships);

                var result = bizEntityRelationshipTail.GetOrCreateEntityRelationshipTailID(EntityID, GetPath(listRelationships));
                if (ItemSelected != null)
                {
                    ItemSelected(this, new EntityRelationshipTailSelectedArg()
                    {
                        EntityRelationshipTailID = result
                    });
                }
                MessageBox.Show("ثبت انجام شد");
            }
        }
コード例 #16
0
 public EntityRelationshipTailDTO JoinRelationshipTail(EntityRelationshipTailDTO relationshipTail1, EntityRelationshipTailDTO relationshipTail2)
 {
     return(bizRelationshipTail.JoinRelationshipTail(relationshipTail1, relationshipTail2));
 }
コード例 #17
0
        private void AddDataListReportArea(int entityID, string title, DP_SearchRepository searchRepository, bool initialSearchShouldBeIncluded, RelationshipDTO causingRelationship = null, EntityRelationshipTailDTO causingRelationshipTail = null)
        {
            var dataListReportArea = new DataListReportArea();

            dataListReportArea.InitialSearchShouldBeIncluded   = initialSearchShouldBeIncluded;
            dataListReportArea.RelatedDataReportArearequested += FirstDataListReportArea_RelatedDataListReportArearequested;
            dataListReportArea.DataItemsSearchedByUser        += DataListReportArea_DataItemsSearchedByUser;
            var firstInit = new DataListReportAreaInitializer();

            firstInit.SearchRepository        = searchRepository;
            firstInit.EntitiyID               = entityID;
            firstInit.Title                   = title;
            firstInit.CausingRelationship     = causingRelationship;
            firstInit.CausingRelationshipTail = causingRelationshipTail;
            dataListReportArea.SetAreaInitializer(firstInit);
            View.AddDataListReportArea(dataListReportArea.View);

            if (CurrentDataListReportArea == null)
            {
                CurrentDataListReportArea = dataListReportArea;
                DataListReportAreas.Add(dataListReportArea);
            }
            else
            {
                var currentIndex = DataListReportAreas.IndexOf(CurrentDataListReportArea);
                DataListReportAreas.Insert(currentIndex + 1, dataListReportArea);
                CurrentDataListReportArea = dataListReportArea;
            }
            SetLinks();
        }
コード例 #18
0
        // SecurityHelper securityHelper = new SecurityHelper();
        //public EntityRelationshipTailDTO GetRelationshipTail(int id)
        //{
        //    return bizRelationshipTail.GetEntityRelationshipTail(id);
        //}
        //مهم اینه که داده مبدا از ویو نباشد
        public DP_SearchRepository GetTargetSearchItemFromRelationshipTail(DP_BaseData firstDataItem, EntityRelationshipTailDTO relationshipTail)
        {
            DP_SearchRepository searchItem = null;
            var linkedRelationshipTails    = GetLinkedRelationshipTails(relationshipTail.ReverseRelationshipTail);

            searchItem = GetSourceSideSearchItemFromRelationshipTail(linkedRelationshipTails.First, true, firstDataItem);
            return(searchItem);
        }
コード例 #19
0
        public object GetValueSomeHow(DR_Requester requester, DP_DataRepository sourceData, EntityRelationshipTailDTO valueRelationshipTail, int valueColumnID)
        {
            DataitemRelatedColumnValueHandler dataitemRelatedColumnValueHandler = new DataitemRelatedColumnValueHandler();

            return(dataitemRelatedColumnValueHandler.GetValueSomeHow(requester, sourceData, valueRelationshipTail, valueColumnID));
        }
コード例 #20
0
        private DataMenuSearchableReportRelationshipDTO ToDataMenuSearchableReportRelationshipDTO(DataMenuSearchableReportRelationship dbRel, EntityRelationshipTailDTO tail, EntitySearchableReportDTO entityReport)
        {
            var result = new DataMenuSearchableReportRelationshipDTO();

            result.ID = dbRel.ID;
            result.RelationshipTailID = dbRel.EntityRelationshipTailID;
            result.RelationshipTail   = tail;
            BizEntityReport bizEntityReport = new BizEntityReport();

            result.EntitySearchableReportID = dbRel.EntitySearchableReportID;
            result.SearchableReportReport   = entityReport;
            result.Group1 = dbRel.Group1;
            return(result);
        }
コード例 #21
0
        private DataMenuDataViewRelationshipDTO ToDataMenuDataViewRelationshipDTO(DataMenuDataViewRelationship dbRel, EntityRelationshipTailDTO tail)
        {
            var rel = new DataMenuDataViewRelationshipDTO();

            rel.ID = dbRel.ID;
            rel.RelationshipTailID      = dbRel.EntityRelationshipTailID;
            rel.RelationshipTail        = tail;
            rel.Group1                  = dbRel.Group1;
            rel.TargetDataMenuSettingID = dbRel.TargetDataMenuSettingID ?? 0;
            return(rel);
        }
        public object GetValueSomeHow(DR_Requester requester, DP_DataRepository sentdata, EntityRelationshipTailDTO valueRelationshipTail, int valueColumnID, bool firstIfMultiple = false)
        {
            if (valueRelationshipTail == null)
            {
                var proprty = sentdata.GetProperty(valueColumnID);
                return(proprty?.Value);
            }
            else
            {
                DP_DataRepository relatedData = null;
                if (sentdata.ParantChildRelationshipInfo != null && sentdata.ParantChildRelationshipInfo.Relationship.PairRelationshipID == valueRelationshipTail.Relationship.ID)
                {
                    if (sentdata.ParantChildRelationshipInfo.Relationship.PairRelationshipID == valueRelationshipTail.Relationship.ID)
                    {
                        relatedData = sentdata.ParantChildRelationshipInfo.SourceData;
                    }
                }
                else if (sentdata.ChildRelationshipInfos.Any(x => x.Relationship.ID == valueRelationshipTail.Relationship.ID))
                {
                    var childInfo = sentdata.ChildRelationshipInfos.First(x => x.Relationship.ID == valueRelationshipTail.Relationship.ID);
                    if (childInfo.RelatedData.Count > 1)
                    {
                        if (firstIfMultiple)
                        {
                            relatedData = childInfo.RelatedData.First();
                        }
                        else
                        {
                            throw new Exception("asav");
                        }
                    }
                    else if (childInfo.RelatedData.Count == 1)
                    {
                        relatedData = childInfo.RelatedData.First();
                    }
                    else if (childInfo.RelatedData.Count == 0)
                    {
                        //یعنی یا داده مرتبطی وجود نداشته یا حذف شده
                        return("");
                    }
                }
                if (relatedData != null)
                {
                    return(GetValueSomeHow(requester, relatedData, valueRelationshipTail.ChildTail, valueColumnID, firstIfMultiple));
                }
                else
                {
                    //var columnValues = sentdata.KeyProperties;
                    //if (columnValues == null || columnValues.Count == 0)
                    //    throw new Exception("asasd");

                    //سکوریتی داده اعمال میشود
                    //  var requester = AgentUICoreMediator.GetAgentUICoreMediator.GetRequester();

                    //این شرط منطقیه؟؟
                    if (!sentdata.IsNewItem)
                    {
                        var relationshipTailDataManager  = new RelationshipTailDataManager();
                        var searchDataTuple              = relationshipTailDataManager.GetTargetSearchItemFromRelationshipTail(sentdata, valueRelationshipTail);
                        DR_SearchFullDataRequest request = new DR_SearchFullDataRequest(requester, searchDataTuple);
                        var searchResult = new SearchRequestManager().Process(request);
                        if (searchResult.ResultDataItems.Count > 1)
                        {
                            throw new Exception("asdasd");
                        }
                        else if (searchResult.ResultDataItems.Count == 1)
                        {
                            var foundDataItem = searchResult.ResultDataItems.First();
                            var prop          = foundDataItem.GetProperty(valueColumnID);
                            if (prop != null)
                            {
                                return(prop.Value);
                            }
                            else
                            {
                                return("");
                            }
                        }
                        else
                        {
                            return("");
                        }
                    }
                    else
                    {
                        return("");
                    }
                }
            }
            //return "";
        }
コード例 #23
0
        private DataLinkItemGroup GetIncludedDataLinkItems(EntityRelationshipTailDTO relationshipTail, DataLinkDTO selectedDataLink, DP_DataView relationshipFirstData, DP_DataView targetData, int level
                                                           , EntityRelationshipTailDataMenuDTO relationshipTailDataMenuDTO, DataLinkItem parentDataLinkItem = null, DataLinkItemGroup result = null, List <DataLinkItem> allItems = null)
        {
            if (result == null)
            {
                result = new DataLinkItemGroup();
            }
            if (relationshipTail != null && relationshipTail.ChildTail != null)
            {
                RelationshipTailDataManager relationshipTailDataManager = new RelationshipTailDataManager();

                //var firstData = new DP_DataRepository();
                //firstData.TargetEntityID = FirstData.TargetEntityID;
                //firstData.DataView = FirstData;
                //foreach (var key in FirstData.KeyProperties)
                //{
                //    firstData.AddProperty(new ColumnDTO() { ID = key.ColumnID }, key.Value);
                //}
                var searchDataTuple         = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipDataManager.GetSecondSideSearchDataItemByRelationship(relationshipFirstData, relationshipTail.Relationship.ID);
                var searchPhraseToOtherData = relationshipTailDataManager.GetTargetSearchItemFromRelationshipTail(targetData, relationshipTail.ChildTail.ReverseRelationshipTail);
                searchDataTuple.Phrases.AddRange(searchPhraseToOtherData.Phrases);
                var requester = AgentUICoreMediator.GetAgentUICoreMediator.GetRequester();
                //سکوریتی داده اعمال میشود
                var searchRequest = new DR_SearchViewRequest(requester, searchDataTuple);
                //searchRequest.EntityID = parentTail.RelationshipTargetEntityID;
                var searchResult = AgentUICoreMediator.GetAgentUICoreMediator.requestRegistration.SendSearchViewRequest(searchRequest);

                if (parentDataLinkItem != null)
                {
                    parentDataLinkItem.TailPath = relationshipTail.RelationshipIDPath;
                    if (relationshipTailDataMenuDTO != null)
                    {
                        if (relationshipTailDataMenuDTO.Items.Any(x => x.Path == parentDataLinkItem.TailPath))
                        {
                            parentDataLinkItem.DataMenuID = relationshipTailDataMenuDTO.Items.First(x => x.Path == parentDataLinkItem.TailPath).DataMenuSettingID;
                        }
                    }
                }
                if (searchResult.Result == Enum_DR_ResultType.SeccessfullyDone)
                {
                    foreach (var item in searchResult.ResultDataItems)
                    {
                        DataLinkItem found = null;
                        if (allItems == null)
                        {
                            allItems = new List <DataLinkItem>();
                        }
                        else
                        {
                            if (selectedDataLink.NotJointEntities == true)
                            {
                                if (allItems.Any(x => AgentHelper.DataItemsAreEqual(item, x.DataItem)))
                                {
                                    var fItem = allItems.First(x => AgentHelper.DataItemsAreEqual(item, x.DataItem));
                                    found = fItem;
                                }
                            }
                        }
                        if (found == null)
                        {
                            found          = new DataLinkItem();
                            found.DataItem = item;
                            found.Level    = level;

                            result.Items.Add(found);
                            allItems.Add(found);
                        }
                        if (parentDataLinkItem != null)
                        {
                            result.Relations.Add(new DataLinkRelation(parentDataLinkItem, found));
                        }

                        GetIncludedDataLinkItems(relationshipTail.ChildTail, selectedDataLink, item, targetData, level + 1, relationshipTailDataMenuDTO, found, result);
                    }
                }
                else
                {
                    AgentUICoreMediator.GetAgentUICoreMediator.UIManager.ShowInfo(searchResult.Message, searchResult.Details, MyUILibrary.Temp.InfoColor.Red);
                }
            }
            return(result);
        }
コード例 #24
0
        //private void ViewMenu_Cliecked(object sender, EventArgs e, DynamicContextMenu menu)
        //{
        //    menu.OnClicked();
        //}
        private DataTreeItem ToRelationItemNode(DataTreeItem parentItem, DP_DataView relatedItem, EntityRelationshipTailDTO relation, bool selectable, bool tempChild)
        {
            DataTreeItem item = new DataTreeItem();

            item.DataItem = relatedItem;
            item.Relation = relation;
            item.ItemType = DataTreeItemType.Relation;
            item.ViewItem = parentItem.ViewItem.AddNode(relation.EntityPath, selectable, tempChild);
            //item.ViewItem.ContextMenuLoaded += (sender, e) => ViewItem_ContextMenuLoaded(sender, e, item);
            DataTreeItems.Add(item);
            return(item);
        }
コード例 #25
0
        private Tuple <EntityRelationshipTailDTO, List <TableDrivedEntity>, List <Relationship> > ToEntityRelationshipTailDTO
            (MyProjectEntities projectContext, string relationshipPath, int initialiEntityID, string initialiEntityAlias, int targetEntityID, string targetEntityAlias
            , EntityRelationshipTailDTO reverseRelationshipTail, bool withEntitiesAndRelationships, List <TableDrivedEntity> entities = null, List <Relationship> relationships = null)
        {
            if (entities == null)
            {
                entities      = new List <TableDrivedEntity>();
                relationships = new List <Relationship>();
            }

            //    اینجا درست شه. بعد چک شه همه جا در درسترس بودن انتیتی از کلاس بیز انتیتی چک بشه و نه از گرقتن اسیند پرمیشن ها

            EntityRelationshipTailDTO result = new EntityRelationshipTailDTO();

            result.InitialEntityID     = initialiEntityID;
            result.InitialiEntityAlias = initialiEntityAlias;
            result.TargetEntityID      = targetEntityID;
            result.TargetEntityAlias   = targetEntityAlias;
            //var targetEntity = bizTableDrivedEntity.GetSimpleEntity(requester, result.TargetEntityID);
            //if (targetEntity != null)
            //    result.TargetEntityAlias = targetEntity.Alias;
            //else
            //    result.TargetEntityAlias = result.TargetEntityID.ToString();
            result.RelationshipIDPath = relationshipPath;
            if (!string.IsNullOrEmpty(relationshipPath))
            {
                int    relationshipID = 0;
                string rest           = "";
                if (relationshipPath.Contains(","))
                {
                    var splt = relationshipPath.Split(',');
                    relationshipID = Convert.ToInt32(splt[0]);
                    for (int i = 1; i <= splt.Count() - 1; i++)
                    {
                        rest += (rest == "" ? "" : ",") + splt[i];
                    }
                }
                else
                {
                    relationshipID = Convert.ToInt32(relationshipPath);
                }
                if (withEntitiesAndRelationships)
                {
                    var relationship = projectContext.Relationship.First(x => x.ID == relationshipID);
                    if (!entities.Any(x => x.ID == relationship.TableDrivedEntityID2))
                    {
                        entities.Add(relationship.TableDrivedEntity1);
                    }
                    if (!relationships.Any(x => x.ID == relationshipID))
                    {
                        relationships.Add(relationship);
                    }
                }
                result.Relationship = bizRelationship.GetRelationship(relationshipID);
                if (rest != "")
                {
                    result.ChildTail = ToEntityRelationshipTailDTO(projectContext, rest, initialiEntityID, initialiEntityAlias, targetEntityID, targetEntityAlias, null, withEntitiesAndRelationships, entities, relationships).Item1;
                    //result.LastRelationship = result.ChildTail.LastRelationship;
                }
            }
            //else
            //    result.LastRelationship = result.Relationship;
            result.IsOneToManyTail = ((result.Relationship != null && result.Relationship.TypeEnum == Enum_RelationshipType.OneToMany) ||
                                      (result.ChildTail != null && result.ChildTail.IsOneToManyTail));

            result.EntityPath = result.Relationship.Entity1 + "==>" + GetEntityPath(result);
            if (reverseRelationshipTail == null)
            {
                result.ReverseRelationshipTail = ToEntityRelationshipTailDTO(projectContext, GetReveseRaletionshipPath(result), result.TargetEntityID, targetEntityAlias, result.InitialEntityID, initialiEntityAlias, result, withEntitiesAndRelationships, entities, relationships).Item1;
            }
            else
            {
                result.ReverseRelationshipTail = reverseRelationshipTail;
            }
            //if (result.ReverseRelationshipTail.ChildTail != null)
            //    result.ReverseRelationshipTail.LastRelationship = result.ReverseRelationshipTail.ChildTail.LastRelationship;
            return(new Tuple <EntityRelationshipTailDTO, List <TableDrivedEntity>, List <Relationship> >(result, entities, relationships));
            //if (item.ReverseRelationshipTailID != null)
            //    result.ReverseRelationshipTailID = item.ReverseRelationshipTailID.Value;
            //result.TargetEntityAlias = item.TableDrivedEntity1.Alias;
            //result.RelationshipSourceEntityID = item.Relationship.TableDrivedEntityID1;
            //result.RelationshipTargetEntityID = item.Relationship.TableDrivedEntityID2;
            //BizRelationship bizRElationship = new BizRelationship();
            //if (item.Relationship.TypeEnum != null)
            //    result.SourceToTargetRelationshipType = (Enum_RelationshipType)item.Relationship.TypeEnum.Value;
            //else
            //    result.SourceToTargetRelationshipType = Enum_RelationshipType.None;
            //result.SourceToTargetMasterRelationshipType = (Enum_MasterRelationshipType)item.Relationship.MasterTypeEnum;
            //foreach (var relcolumn in item.Relationship.RelationshipColumns)
            //{
            //    result.RelationshipColumns.Add(bizRElationship.ToRelationshipColumn(result.SourceToTargetMasterRelationshipType, relcolumn));
            //}
            //result.RelationshipID = item.RelationshipID;
            //result.Relationship = bizRElationship.ToRelationshipDTO(item.Relationship);
            //result.RelationshipIDPath = GetRelationshipPath(item);
            //result.RelationshipPath = GetEntityPath(item);
            //foreach (var child in item.EntityRelationshipTail11)
            //{
            //    result.ChildTail = ToEntityRelationshipTailDTO(child);
            //}
        }