public bool DeleteEntitySecurityDirect(int id)
        {
            EntitySecurityDirectDTO result = new EntitySecurityDirectDTO();

            using (var projectContext = new DataAccess.MyProjectEntities())
            {
                var item = projectContext.EntitySecurityDirect.FirstOrDefault(x => x.ID == id);
                //foreach (var child in item.EntitySecurityDirectStates.ToList())
                //    projectContext.EntitySecurityDirectStates.Remove(child);
                projectContext.EntitySecurityDirect.Remove(item);
                projectContext.SaveChanges();
                return(true);
            }
        }
 private void GetDirectSecurity()
 {
     if (lokEntities.SelectedItem != null && cmbMode.SelectedItem != null)
     {
         Message = bizRoleSecurity.GetEntitySecurityDirectByEntityID(MyProjectManager.GetMyProjectManager.GetRequester(), (int)lokEntities.SelectedValue,
                                                                     (DataDirectSecurityMode)cmbMode.SelectedItem, false);
         if (Message == null)
         {
             Message = new EntitySecurityDirectDTO();
             Message.TableDrivedEntityID = (int)lokEntities.SelectedValue;
             Message.Mode = (DataDirectSecurityMode)cmbMode.SelectedItem;
         }
         ShowMessage();
     }
 }
        //public bool EntityHasInDirectSecurityWithDirectSecurity(DR_Requester requester, int entityID, DataDirectSecurityMode mode)
        //{
        //    using (var context = new MyProjectEntities())
        //    {
        //        if (mode == DataDirectSecurityMode.FetchData)
        //        {
        //            if (context.EntitySecurityInDirect.Any(x => x.TableDrivedEntityID == entityID &&
        //            (x.Mode == (short)DataInDirectSecurityMode.OnlyFetchData || x.Mode == (short)DataInDirectSecurityMode.Full)))
        //            {
        //                var indirect = context.EntitySecurityInDirect.First(x => x.TableDrivedEntityID == entityID &&
        //            (x.Mode == (short)DataInDirectSecurityMode.OnlyFetchData || x.Mode == (short)DataInDirectSecurityMode.Full));

        //                return context.EntitySecurityDirect.Any(x => x.TableDrivedEntityID == indirect.EntityRelationshipTail.TargetEntityID && x.Mode == (short)mode);
        //            }
        //            else
        //                return false;
        //        }
        //        else if (mode == DataDirectSecurityMode.ReadonlyData)
        //        {
        //            if (context.EntitySecurityInDirect.Any(x => x.TableDrivedEntityID == entityID && x.Mode == (short)DataInDirectSecurityMode.Full))
        //            {
        //                var indirect = context.EntitySecurityInDirect.First(x => x.TableDrivedEntityID == entityID && x.Mode == (short)DataInDirectSecurityMode.Full);
        //                return context.EntitySecurityDirect.Any(x => x.TableDrivedEntityID == indirect.EntityRelationshipTail.TargetEntityID && x.Mode == (short)mode);
        //            }
        //            else
        //                return false;
        //        }
        //    }
        //    return false;
        //}
        //public bool EntityHasInDirectSecurities(DR_Requester requester, int entityID)
        //{
        //    using (var context = new MyProjectEntities())
        //    {
        //        if (context.EntitySecurityInDirect.Any(x => x.TableDrivedEntityID == entityID))
        //        {
        //            var indirect = context.EntitySecurityInDirect.First(x => x.TableDrivedEntityID == entityID);

        //            return context.EntitySecurityDirect.Any(x => x.TableDrivedEntityID == indirect.EntityRelationshipTail.TargetEntityID);
        //        }
        //        else
        //            return false;
        //    }
        //}

        public EntitySecurityDirectDTO GetEntitySecurityDirectByEntityID(DR_Requester requester, int entityID, DataDirectSecurityMode mode, bool withDetails)
        {
            EntitySecurityDirectDTO result = new EntitySecurityDirectDTO();

            using (var projectContext = new DataAccess.MyProjectEntities())
            {
                var item = projectContext.EntitySecurityDirect.FirstOrDefault(x => x.TableDrivedEntityID == entityID && x.Mode == (short)mode);
                if (item != null)
                {
                    return(ToEntitySecurityDirectDTO(requester, item, withDetails));
                }
                else
                {
                    return(null);
                }
            }
        }
        public frmEntitySecurityDirect(int entityID)
        {
            InitializeComponent();
            //   cmbInOrNotIn.ItemsSource = Enum.GetValues(typeof(InORNotIn)).Cast<InORNotIn>();

            SetEntites();
            //  SetSecuritySubjects();
            //  SetAndOrType();
            //     SetDatabaseFunctions();
            //  SetOperators();
            //  SetReservedValues();
            SetMode();
            cmbMode.SelectionChanged += CmbMode_SelectionChanged;
            //lokFormula.EditItemEnabled = true;
            //lokFormula.NewItemEnabled = true;
            //lokFormula.EditItemClicked += LokFormula_EditItemClicked;

            //   dtgConditions.RowLoaded += DtgConditions_RowLoaded;
            //   dtgConditions.CellEditEnded += DtgConditions_CellEditEnded;
            lokState.EditItemClicked += colEntityState_EditItemClicked;
            lokState.EditItemEnabled  = true;
            lokState.NewItemEnabled   = true;
            //   ControlHelper.GenerateContextMenu(dtgStates);
            //  ControlHelper.GenerateContextMenu(dtgSecuritySubjects);
            if (entityID != 0)
            {
                Message = new EntitySecurityDirectDTO();
                Message.TableDrivedEntityID = entityID;
                ShowMessage();
            }



            //ControlHelper.GenerateContextMenu(dtgColumnValue);
            //ControlHelper.GenerateContextMenu(dtgFormulaValue);
            //lokRelationshipTail.SelectionChanged += LokRelationshipTail_SelectionChanged;
            //lokRelationshipTail.EditItemClicked += LokRelationshipTail_EditItemClicked;
            //cmbOperator.ItemsSource = Enum.GetValues(typeof(Enum_EntityStateOperator)).Cast<Enum_EntityStateOperator>();
            //colReservedValue.ItemsSource = Enum.GetValues(typeof(SecurityReservedValue));
        }
        //private EntitySecurityConditionDTO ToEntitySecurityConditionDTO(EntitySecurityCondition item, bool withDetails)
        //{
        //    var result = new EntitySecurityConditionDTO();
        //    result.ColumnID = item.ColumnID;
        //    result.Value = item.Value;
        //    if (item.DatabaseFunctionID != null)
        //        result.DBFunctionID = item.DatabaseFunctionID.Value;

        //    if (item.EntityRelationshipTailID != null)
        //    {

        //        result.RelationshipTailID = item.EntityRelationshipTailID.Value;

        //    }
        //    if (withDetails)
        //    {
        //        BizEntityRelationshipTail bizEntityRelationshipTail = new BizEntityRelationshipTail();
        //        if (item.EntityRelationshipTailID != null)
        //            result.RelationshipTail = bizEntityRelationshipTail.ToEntityRelationshipTailDTO(item.EntityRelationshipTail);
        //        BizColumn bizColumn = new BizColumn();
        //        result.Column = bizColumn.ToColumnDTO(item.Column, true);
        //    }
        //    result.ReservedValue = (SecurityReservedValue)item.ReservedValue;
        //    result.Operator = (EntitySecurityOperator)item.Operator;
        //    return result;
        //}

        //public EntitySecurityInDirectDTO GetEntitySecurityInDirect(DR_Requester requester, int entityID, bool withDetails)
        //{
        //    EntitySecurityInDirectDTO result = new EntitySecurityInDirectDTO();
        //    using (var projectContext = new DataAccess.MyProjectEntities())
        //    {
        //        var item = projectContext.EntitySecurityInDirect.FirstOrDefault(x => x.TableDrivedEntityID == entityID);
        //        if (item != null)
        //            return ToEntitySecurityInDirectDTO(item, withDetails);
        //        else
        //            return null;

        //    }
        //}
        //public EntitySecurityInDirectDTO GetEntitySecurityInDirect(DR_Requester requester, int entityID, bool withDetails)
        //{
        //    EntitySecurityInDirectDTO result = new EntitySecurityInDirectDTO();
        //    using (var projectContext = new DataAccess.MyProjectEntities())
        //    {
        //        var item = projectContext.EntitySecurityInDirect.FirstOrDefault(x => x.TableDrivedEntityID == entityID);
        //        if (item != null)
        //            return ToEntitySecurityInDirectDTO(item, withDetails);
        //        else
        //            return null;
        //    }
        //}

        //public EntitySecurityInDirectDTO ToEntitySecurityInDirectDTO(EntitySecurityInDirect item, bool withDetails)
        //{
        //    EntitySecurityInDirectDTO result = new EntitySecurityInDirectDTO();
        //    result.ID = item.ID;
        //    //result.DirectRoleSecurityID = item.EntitySecurityDirectID;
        //    result.RelationshipTailID = item.EntityRelationshipTailID;
        //    result.TableDrivedEntityID = item.TableDrivedEntityID;
        //    if (item.Mode != null)
        //        result.Mode = (DataInDirectSecurityMode)item.Mode;

        //    if (withDetails)
        //    {
        //        BizEntityRelationshipTail bizEntityRelationshipTail = new BizEntityRelationshipTail();
        //        result.RelationshipTail = bizEntityRelationshipTail.ToEntityRelationshipTailDTO(item.EntityRelationshipTail);
        //        //result.DirectRoleSecurity = ToEntitySecurityDirectDTO(item.EntitySecurityDirect, withDetails);
        //    }

        //    return result;
        //}

        public int UpdateEntitySecurityDirect(EntitySecurityDirectDTO message)
        {
            using (var projectContext = new DataAccess.MyProjectEntities())
            {
                var dbItem = projectContext.EntitySecurityDirect.FirstOrDefault(x => x.ID == message.TableDrivedEntityID && x.Mode == (short)message.Mode);
                if (dbItem == null)
                {
                    dbItem = new DataAccess.EntitySecurityDirect();
                    projectContext.EntitySecurityDirect.Add(dbItem);
                }
                dbItem.TableDrivedEntityID = message.TableDrivedEntityID;
                //if (message.SecuritySubjectID != 0)
                //    dbItem.SecuritySubjectID = message.SecuritySubjectID;
                //else
                //    dbItem.SecuritySubjectID = null;


                //dbItem.SecuritySubjectOperator = (short)message.SecuritySubjectInORNotIn;

                //while (dbItem.EntitySecurityDirectSecuritySubject.Any())
                //    projectContext.EntitySecurityDirectSecuritySubject.Remove(dbItem.EntitySecurityDirectSecuritySubject.First());
                //foreach (var nItem in message.SecuritySubjects)
                //{
                //    dbItem.EntitySecurityDirectSecuritySubject.Add(new EntitySecurityDirectSecuritySubject() { SecuritySubjectID = nItem.SecuritySubjectID });//, SecuritySubjectOperator = (short)nItem.SecuritySubjectOperator });
                //}
                dbItem.Description = message.Description;
                dbItem.Mode        = (short)message.Mode;
                // dbItem.IgnoreSecurity = message.IgnoreSecurity;
                //dbItem.ConditionsAndOrType = (short)message.ConditionAndORType;
                dbItem.TableDrivedEntityStateID = message.EntityStateID;


                //if (message.FormulaID != 0)
                //    dbItem.FormulaID = message.FormulaID;
                //else
                //    dbItem.FormulaID = null;
                //if (message.ColumnID != 0)
                //{
                //    dbItem.ColumnID = message.ColumnID;
                //    if (message.RelationshipTailID == 0)
                //        dbItem.EntityRelationshipTailID = null;
                //    else
                //        dbItem.EntityRelationshipTailID = message.RelationshipTailID;
                //}
                //else
                //{
                //    dbItem.ColumnID = null;
                //    dbItem.EntityRelationshipTailID = null;
                //}
                //dbItem.ValueOperator = (short)message.ValueOperator;

                //while (dbItem.EntitySecurityDirectValues.Any())
                //    projectContext.EntitySecurityDirectValues.Remove(dbItem.EntitySecurityDirectValues.First());
                //foreach (var nItem in message.Values)
                //{
                //    dbItem.EntitySecurityDirectValues.Add(new EntitySecurityDirectValues() { Value = nItem.Value, ReservedValue = (short)nItem.SecurityReservedValue });
                //}

                //while (dbItem.EntitySecurityDirectStates.Any())
                //    projectContext.EntitySecurityDirectStates.Remove(dbItem.EntitySecurityDirectStates.First());
                //foreach (var securityState in message.EntityStates)
                //{
                //    var dbCondition = new EntitySecurityDirectStates();
                //    dbCondition.TableDrivedEntityStateID = securityState.EntityStateID;
                //    dbItem.EntitySecurityDirectStates.Add(dbCondition);
                //}

                //while (dbItem.EntitySecurityCondition.Any())
                //    projectContext.EntitySecurityCondition.Remove(dbItem.EntitySecurityCondition.First());
                //foreach (var conditoin in message.Conditions)
                //{
                //    var dbCondition = new EntitySecurityCondition();
                //    dbCondition.ColumnID = conditoin.ColumnID;
                //    dbCondition.Value = conditoin.Value;
                //    if (conditoin.DBFunctionID != 0)
                //        dbCondition.DatabaseFunctionID = conditoin.DBFunctionID;
                //    else
                //        dbCondition.DatabaseFunctionID = null;
                //    if (conditoin.RelationshipTailID != 0)
                //        dbCondition.EntityRelationshipTailID = conditoin.RelationshipTailID;
                //    else
                //        dbCondition.EntityRelationshipTailID = null;
                //    dbCondition.ReservedValue = (short)conditoin.ReservedValue;
                //    dbCondition.Operator = (short)conditoin.Operator;
                //    dbItem.EntitySecurityCondition.Add(dbCondition);
                //}

                projectContext.SaveChanges();
                return(dbItem.ID);
            }
        }
        public EntitySecurityDirectDTO ToEntitySecurityDirectDTO(DR_Requester requester, EntitySecurityDirect item, bool withDetails)
        {
            EntitySecurityDirectDTO result = new EntitySecurityDirectDTO();

            result.ID = item.ID;
            //if (item.SecuritySubjectID != null)
            //    result.SecuritySubjectID = item.SecuritySubjectID.Value;
            //else
            //    result.SecuritySubjectID = 0;
            if (item.Mode != null)
            {
                result.Mode = (DataDirectSecurityMode)item.Mode;
            }
            //result.IgnoreSecurity = item.IgnoreSecurity;
            result.Description         = item.Description;
            result.TableDrivedEntityID = item.TableDrivedEntityID;
            //if (item.SecuritySubjectOperator != null)
            //    result.SecuritySubjectInORNotIn = (InORNotIn)item.SecuritySubjectOperator;
            //foreach (var valItem in item.EntitySecurityDirectSecuritySubject)
            //{
            //    result.SecuritySubjects.Add(new ChildSecuritySubjectDTO { SecuritySubjectID = valItem.SecuritySubjectID });//, SecuritySubjectOperator = (Enum_SecuritySubjectOperator)valItem.SecuritySubjectOperator });
            //}

            //   EntitySecurityDirectStatesDTO securityState = new EntitySecurityDirectStatesDTO();
            result.EntityStateID = item.TableDrivedEntityStateID;
            if (withDetails && result.EntityStateID != 0)
            {
                BizEntityState bizEntityState = new BizEntityState();
                result.EntityState = bizEntityState.ToEntityStateDTO(requester, item.TableDrivedEntityState, withDetails);
            }

            //foreach (var valItem in item.EntitySecurityDirectValues)
            //{
            //    result.Values.Add(new ModelEntites.EntityStateValueDTO() { Value = valItem.Value, SecurityReservedValue = valItem.ReservedValue == null ? SecurityReservedValue.None : (SecurityReservedValue)valItem.ReservedValue });
            //}

            //result.FormulaID = item.FormulaID ?? 0;
            //if (result.FormulaID != 0 && withDetails)
            //{  //??با جزئیات؟؟........................................................................
            //    var bizFormula = new BizFormula();
            //    result.Formula = bizFormula.GetFormula(requester, item.FormulaID.Value, withDetails);
            //}
            //result.ColumnID = item.ColumnID ?? 0;
            //if (item.Column != null)
            //{
            //    BizColumn bizColumn = new BizColumn();
            //    result.Column = bizColumn.ToColumnDTO(item.Column, true);

            //}
            //result.RelationshipTailID = item.EntityRelationshipTailID ?? 0;
            //if (item.EntityRelationshipTail != null)
            //{
            //    BizEntityRelationshipTail bizEntityRelationshipTail = new BizEntityRelationshipTail();
            //    result.RelationshipTail = bizEntityRelationshipTail.ToEntityRelationshipTailDTO(item.EntityRelationshipTail);
            //}
            //if (item.ValueOperator != null)
            //    result.ValueOperator = (Enum_EntityStateOperator)item.ValueOperator;

            //result.EntityStates.Add(securityState);

            return(result);
        }
        //private void optFormula_Checked(object sender, RoutedEventArgs e)
        //{
        //    tabColumn.Visibility = Visibility.Collapsed;
        //    tabFormula.Visibility = Visibility.Visible;
        //    tabFormula.IsSelected = true;
        //}


        //private void optColumn_Checked(object sender, RoutedEventArgs e)
        //{
        //    tabFormula.Visibility = Visibility.Collapsed;
        //    tabColumn.Visibility = Visibility.Visible;
        //    tabColumn.IsSelected = true;
        //}
        //private void btnReturn_Click(object sender, RoutedEventArgs e)
        //{
        //    MyProjectManager.GetMyProjectManager.CloseDialog(this);
        //}

        //private void optValue_Checked(object sender, RoutedEventArgs e)
        //{
        //    cmbDatabaseFunction.IsEnabled = false;
        //    txtValue.IsEnabled = true;
        //}

        //private void optDBFunction_Checked(object sender, RoutedEventArgs e)
        //{
        //    txtValue.IsEnabled = false;
        //    cmbDatabaseFunction.IsEnabled = true;

        //}
        //frmEntitySecurityDirectSelect searchView = null;

        //private void btnSearch_Click(object sender, RoutedEventArgs e)
        //{
        //    if (searchView == null)
        //    {
        //        searchView = new frmEntitySecurityDirectSelect();
        //        searchView.EntitySecurityDirectSelected += View_EntitySecurityDirectSelected;
        //    }
        //    MyProjectManager.GetMyProjectManager.ShowDialog(searchView, "جستجوی دسترسی داده");
        //}

        //private void View_EntitySecurityDirectSelected(object sender, EntitySecurityDirectSelectArg e)
        //{
        //    if (e.ID != 0)
        //    {
        //        MyProjectManager.GetMyProjectManager.CloseDialog(sender);
        //        GetEntitySecurityDirect(MyProjectManager.GetMyProjectManager.GetRequester(), e.ID);
        //    }
        //}

        private void btnNew_Click(object sender, RoutedEventArgs e)
        {
            Message = new EntitySecurityDirectDTO();
            ShowMessage();
        }