Пример #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));
            }
        }
 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("");
        }
 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);
        }
        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 "";
        }
        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);
        }
        //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);
            //}
        }