コード例 #1
0
        private SimpleEntityDTO ToSimpleEntityDTO(TableDrivedEntity item)
        {
            var result = new SimpleEntityDTO();

            result.ID      = item.ID;
            result.Name    = item.Name;
            result.TableID = item.TableID;
            result.Table   = item.Table.Name;
            result.Alias   = item.Alias; result.Criteria = item.Criteria;
            result.IndependentDataEntry = item.IndependentDataEntry;
            result.BatchDataEntry       = item.BatchDataEntry;
            result.IsAssociative        = item.IsAssociative;
            result.IsDataReference      = item.IsDataReference;
            result.IsStructurReferencee = item.IsStructurReferencee;
            return(result);
        }
コード例 #2
0
        public bool GenerateDefaultEntities()
        {
            GenericResult <OperationResult> result = new GenericResult <OperationResult>();

            try
            {
                using (var projectContext = new DataAccess.MyProjectEntities())
                {
                    var list    = projectContext.Table.Where(x => !x.TableDrivedEntity.Any(y => y.Criteria == "" || y.Criteria == null));
                    int count   = list.Count();
                    var counter = 0;
                    foreach (var table in list)
                    {
                        TableDrivedEntity tdEntity = new TableDrivedEntity();
                        tdEntity.IndependentDataEntry = true;
                        tdEntity.Alias = table.Alias;
                        tdEntity.Name  = table.Name;
                        table.TableDrivedEntity.Add(tdEntity);

                        counter++;
                        if (ItemGenerationEvent != null)
                        {
                            ItemGenerationEvent(this, new SimpleGenerationInfoArg()
                            {
                                Title = table.Name, TotalProgressCount = count, CurrentProgress = counter
                            });
                        }
                    }
                    projectContext.SaveChanges();
                    if (ItemGenerationEvent != null)
                    {
                        ItemGenerationEvent(this, new SimpleGenerationInfoArg()
                        {
                            Title = "Operation is completed."
                        });
                    }
                    return(true);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #3
0
        private bool ImposeSecurity(DR_Requester requester, EntitySearchDTO entitySearchDTO, TableDrivedEntity entity)
        {
            BizColumn bizColumn = new BizColumn();

            if (requester.SkipSecurity)
            {
                return(true);
            }

            if (!bizTableDrivedEntity.DataIsAccessable(requester, entity))
            {
                return(false);
            }
            var permission = bizTableDrivedEntity.GetEntityAssignedPermissions(requester, entitySearchDTO.TableDrivedEntityID, true);

            List <EntitySearchColumnsDTO> removeList = new List <ModelEntites.EntitySearchColumnsDTO>();

            foreach (var columnGroup in entitySearchDTO.EntitySearchAllColumns.GroupBy(x => x.RelationshipTailID))
            {
                bool pathPermission = true;
                if (columnGroup.Key == 0)
                {
                    pathPermission = true;
                }
                else
                {
                    var relationshipTail = columnGroup.First(x => x.RelationshipTailID == columnGroup.Key).RelationshipTail;
                    pathPermission = bizEntityRelationshipTail.DataIsAccessable(requester, relationshipTail);
                }
                if (!pathPermission)
                {
                    foreach (var column in columnGroup)
                    {
                        removeList.Add(column);
                    }
                }
                else
                {
                    foreach (var column in columnGroup)
                    {
                        if (column.ColumnID != 0 && !bizColumn.DataIsAccessable(requester, column.ColumnID))
                        {
                            removeList.Add(column);
                        }
                    }
                }
            }
            foreach (var remove in removeList)
            {
                entitySearchDTO.EntitySearchAllColumns.Remove(remove);
            }
            return(true);
        }
コード例 #4
0
        private void SetEntities(int entityID)
        {
            dtgRelationships.DataSource = new ObservableCollection <RelationshipDTO>();
            dtgColumns.DataSource       = new ObservableCollection <ColumnDTO>();
            using (var projectContext = new DataAccess.MyProjectEntities())
            {
                TableDrivedEntity baseEntity = null;
                var entity = projectContext.TableDrivedEntity.First(x => x.ID == entityID);

                if (string.IsNullOrEmpty(entity.Criteria))
                {
                    baseEntity = entity;
                }
                else
                {
                    baseEntity = projectContext.TableDrivedEntity.First(x => (x.Criteria == null || x.Criteria == "") && x.TableID == entity.TableID);
                }

                BaseEntity         = ToSimpleEntityDTO(baseEntity);
                lblEntityName.Text = BaseEntity.Name;



                ObservableCollection <ColumnDTO> columns = new ObservableCollection <ColumnDTO>();
                foreach (var dbColumn in baseEntity.Table.Column)
                {
                    columns.Add(GeneralHelper.ToColumnDTO(dbColumn));
                }
                dtgColumns.DataSource = columns;

                ObservableCollection <RelationshipDTO> relationships = new ObservableCollection <RelationshipDTO>();
                foreach (var dbRelationship in projectContext.Relationship.Where(x => x.TableDrivedEntity.TableID == BaseEntity.TableID
                                                                                 &&
                                                                                 !(x.TableDrivedEntity.TableID == x.TableDrivedEntity1.TableID && (x.RelationshipType.SuperToSubRelationshipType != null || x.RelationshipType.SubToSuperRelationshipType != null))
                                                                                 ))
                {
                    relationships.Add(GeneralHelper.ToRelationshipDTO(dbRelationship));
                }
                dtgRelationships.DataSource = relationships;


                DrivedEntities = new List <SimpleEntityDTO>();
                DrivedEntities.Add(BaseEntity);
                if (Inheritance)
                {
                    foreach (var drived in projectContext.TableDrivedEntity.Where(x => x.ID != BaseEntity.ID && x.TableID == BaseEntity.TableID &&
                                                                                  x.Relationship.Any(y => y.TableDrivedEntityID1 == x.ID && y.TableDrivedEntityID2 == BaseEntity.ID && y.RelationshipType != null && y.RelationshipType.SubToSuperRelationshipType != null)))
                    {
                        DrivedEntities.Add(ToSimpleEntityDTO(drived));
                        var isaRelationship = drived.Relationship.First(x => x.TableDrivedEntityID2 == BaseEntity.ID && x.RelationshipType.SubToSuperRelationshipType != null).RelationshipType.SubToSuperRelationshipType.ISARelationship;
                        optIsTolatParticipation.Checked = isaRelationship.IsTolatParticipation;
                        optIsDisjoint.Checked           = isaRelationship.IsDisjoint == true;
                    }
                }
                else
                {
                    foreach (var drived in projectContext.TableDrivedEntity.Where(x => x.ID != BaseEntity.ID && x.TableID == BaseEntity.TableID))
                    {
                        DrivedEntities.Add(ToSimpleEntityDTO(drived));
                    }
                }

                cmbDrivedEntities.DisplayMember = "Name";
                cmbDrivedEntities.ValueMember   = "ID";
                //cmbDrivedEntities.SelectedIndexChanged -= new System.EventHandler(this.cmbDrivedEntities_SelectedIndexChanged);
                cmbDrivedEntities.DataSource = DrivedEntities;
                //if (defaultEntityID != 0)
                cmbDrivedEntities.SelectedValue = entityID;
                cmbDrivedEntities_SelectionChangeCommitted(null, null);
                //if (DrivedEntities.Count > 0)
                //{
                //    if (DrivedEntities.Any(x => x.ID == mainEntity.ID))
                //        SetDrivedEntites(mainEntity.ID);
                //    else
                //        SetDrivedEntites(0);
                //}
                //else
                //{


                //}
            }
        }
コード例 #5
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            //ستونهای رابطه برای مشتقها از موجودیت پایه حذف شوند
            //کد نوشته شود
            if (txtName.Text == "")
            {
                MessageBox.Show("نام موجودیت مشخص نشده است", "نام موجودیت");
                return;
            }
            if ((cmbDrivedEntities.SelectedValue == null ? 0 : (int)cmbDrivedEntities.SelectedValue) == BaseEntity.ID)
            {
                if (txtCriteria.Text != "")
                {
                    MessageBox.Show("برای موجودیت پایه شرط نمیتوان تعریف نمود", "شرط موجودیت");
                    return;
                }
            }
            else
            {
                if (txtCriteria.Text == "")
                {
                    MessageBox.Show("شرط موجودیت مشخص نشده است", "شرط موجودیت");
                    return;
                }
            }
            if (Inheritance)
            {
                if (!optIsDisjoint.Checked && !optIsOverlap.Checked)
                {
                    MessageBox.Show("نوع رابطه ارث بری مشخص نشده است", "Disjoint or Overlap");
                    return;
                }
                if (!optIsTolatParticipation.Checked && !optIsPartialParticipation.Checked)
                {
                    MessageBox.Show("نوع رابطه ارث بری مشخص نشده است", "TolatParticipation or PartialParticipatio");
                    return;
                }
            }
            using (var projectContext = new DataAccess.MyProjectEntities())
            {
                if (!Inheritance || (cmbDrivedEntities.SelectedValue == null ? 0 : (int)cmbDrivedEntities.SelectedValue) == BaseEntity.ID)
                {
                    var columnMessage  = "";
                    var baseColumns    = dtgColumns.DataSource as ObservableCollection <ColumnDTO>;
                    var derivedColumns = dtgColumnsDrived.DataSource as ObservableCollection <ColumnDTO>;
                    List <ColumnDTO> unSelectedAndNotNullable = new List <ColumnDTO>();
                    foreach (var column in baseColumns)
                    {
                        var dbColumn = projectContext.Column.First(x => x.ID == column.ID);
                        if (dbColumn.IsNull == false)
                        {
                            if (!derivedColumns.Any(x => x.ID == column.ID))
                            {
                                unSelectedAndNotNullable.Add(column);
                                columnMessage += (columnMessage == "" ? "" : Environment.NewLine) + "ستون " + column.Name;
                            }
                        }
                    }
                    if (columnMessage != "")
                    {
                        var message = " ستونهای زیر مقادیر اجباری میگیرند و انتخاب آنها اجباری میباشد" + Environment.NewLine + columnMessage;
                        MessageBox.Show(message, "ستونهای اجباری");
                        return;
                    }
                }



                //انتخاب ستونهای روابط

                //if (Duplicate)
                //{
                //var baseEntity = projectContext.TableDrivedEntity.First(x => x.ID == BaseEntity.ID);
                //baseEntity.Column.Clear();
                //foreach (var item in dtgColumns.DataSource as ObservableCollection<ColumnDTO>)
                //{
                //    baseEntity.Column.Add(projectContext.Column.First(x => x.ID == item.ID));
                //}



                var id           = (cmbDrivedEntities.SelectedValue == null ? 0 : (int)cmbDrivedEntities.SelectedValue);
                var drivedEntity = projectContext.TableDrivedEntity.FirstOrDefault(x => x.ID == id);
                if (drivedEntity == null)
                {
                    drivedEntity = new TableDrivedEntity();

                    drivedEntity.IndependentDataEntry = BaseEntity.IndependentDataEntry;
                    drivedEntity.TableID = BaseEntity.TableID;
                }
                drivedEntity.Name     = txtName.Text;
                drivedEntity.Criteria = txtCriteria.Text;
                drivedEntity.Column.Clear();
                foreach (var item in dtgColumnsDrived.DataSource as ObservableCollection <ColumnDTO> )
                {
                    drivedEntity.Column.Add(projectContext.Column.First(x => x.ID == item.ID));
                }
                foreach (var item in dtgRelationshipsDrived.DataSource as ObservableCollection <RelationshipDTO> )
                {
                    Relationship dbReverseRelationship = null;
                    var          dbRelationship        = projectContext.Relationship.First(x => x.ID == item.ID);
                    if (dbRelationship.Relationship2 != null)
                    {
                        dbReverseRelationship = dbRelationship.Relationship2;
                    }
                    else
                    {
                        dbReverseRelationship = projectContext.Relationship.First(x => x.RelationshipID == item.ID);
                    }

                    if (dbRelationship.TableDrivedEntity.TableID == BaseEntity.TableID)
                    {
                        if (dbRelationship.Relationship2 == null)
                        {
                            dbRelationship.Name = dbRelationship.Name.Replace("(PK)" + dbRelationship.TableDrivedEntity.Name + ".", "(PK)" + drivedEntity.Name + ".");
                        }
                        else
                        {
                            dbRelationship.Name = dbRelationship.Name.Replace("(FK)" + dbRelationship.TableDrivedEntity.Name + ".", "(FK)" + drivedEntity.Name + ".");
                        }

                        dbRelationship.TableDrivedEntity = drivedEntity;
                    }
                    if (dbRelationship.TableDrivedEntity1.TableID == BaseEntity.TableID)
                    {
                        if (dbRelationship.Relationship2 == null)
                        {
                            dbRelationship.Name = dbRelationship.Name.Replace("(FK)" + dbRelationship.TableDrivedEntity.Name + ".", "(FK)" + drivedEntity.Name + ".");
                        }
                        else
                        {
                            dbRelationship.Name = dbRelationship.Name.Replace("(PK)" + dbRelationship.TableDrivedEntity.Name + ".", "(PK)" + drivedEntity.Name + ".");
                        }
                        dbRelationship.TableDrivedEntity1 = drivedEntity;
                    }

                    if (dbReverseRelationship.TableDrivedEntity.TableID == BaseEntity.TableID)
                    {
                        if (dbReverseRelationship.Relationship2 == null)
                        {
                            dbReverseRelationship.Name = dbReverseRelationship.Name.Replace("(PK)" + dbRelationship.TableDrivedEntity.Name + ".", "(PK)" + drivedEntity.Name + ".");
                        }
                        else
                        {
                            dbReverseRelationship.Name = dbReverseRelationship.Name.Replace("(FK)" + dbRelationship.TableDrivedEntity.Name + ".", "(FK)" + drivedEntity.Name + ".");
                        }
                        dbReverseRelationship.TableDrivedEntity = drivedEntity;
                    }
                    if (dbReverseRelationship.TableDrivedEntity1.TableID == BaseEntity.TableID)
                    {
                        if (dbReverseRelationship.Relationship2 == null)
                        {
                            dbReverseRelationship.Name = dbReverseRelationship.Name.Replace("(FK)" + dbRelationship.TableDrivedEntity.Name + ".", "(FK)" + drivedEntity.Name + ".");
                        }
                        else
                        {
                            dbReverseRelationship.Name = dbReverseRelationship.Name.Replace("(PK)" + dbRelationship.TableDrivedEntity.Name + ".", "(PK)" + drivedEntity.Name + ".");
                        }
                        dbReverseRelationship.TableDrivedEntity1 = drivedEntity;
                    }
                }
                if (Inheritance && !((cmbDrivedEntities.SelectedValue == null ? 0 : (int)cmbDrivedEntities.SelectedValue) == BaseEntity.ID))
                {
                    DataAccess.ISARelationship isaRelationship = null;
                    var existingEntity = DrivedEntities.FirstOrDefault(x => x.ID != BaseEntity.ID && x.ID != 0);
                    if (existingEntity != null)
                    {
                        var sampleSuperToSub = projectContext.Relationship.FirstOrDefault(x => x.TableDrivedEntityID1 == BaseEntity.ID && x.TableDrivedEntityID2 == existingEntity.ID && x.RelationshipType != null &&
                                                                                          x.RelationshipType.SuperToSubRelationshipType != null);
                        if (sampleSuperToSub != null)
                        {
                            isaRelationship = sampleSuperToSub.RelationshipType.SuperToSubRelationshipType.ISARelationship;
                        }
                        else
                        {
                            throw (new Exception("ISARelationship cound not be found!"));
                        }
                    }

                    if (isaRelationship == null)
                    {
                        isaRelationship = new ISARelationship();
                    }
                    isaRelationship.IsTolatParticipation = optIsTolatParticipation.Checked == true;
                    isaRelationship.IsDisjoint           = optIsDisjoint.Checked == true;

                    string subTypesStr = "";
                    foreach (var drivedentity in DrivedEntities)
                    {
                        if (drivedentity.ID != BaseEntity.ID)
                        {
                            subTypesStr += (subTypesStr == "" ? "" : ",") + drivedentity.Name;
                        }
                    }
                    if (drivedEntity.ID == 0)
                    {
                        subTypesStr += (subTypesStr == "" ? "" : ",") + drivedEntity.Name;
                    }
                    isaRelationship.Name = BaseEntity.Name + ">" + subTypesStr;
                    if (drivedEntity.ID == 0)
                    {
                        var relationship = new Relationship();
                        relationship.RelationshipType = new RelationshipType();
                        relationship.RelationshipType.SuperToSubRelationshipType = new SuperToSubRelationshipType();
                        relationship.RelationshipType.IsOtherSideCreatable       = true;
                        relationship.TableDrivedEntityID1 = BaseEntity.ID;
                        relationship.RelationshipType.SuperToSubRelationshipType.ISARelationship = isaRelationship;
                        drivedEntity.Relationship1.Add(relationship);



                        var relationshipReverse = new Relationship();
                        relationshipReverse.RelationshipType = new RelationshipType();
                        relationshipReverse.RelationshipType.SubToSuperRelationshipType = new SubToSuperRelationshipType();
                        relationshipReverse.RelationshipType.IsOtherSideCreatable       = true;
                        relationshipReverse.TableDrivedEntityID2 = BaseEntity.ID;
                        relationshipReverse.RelationshipType.SubToSuperRelationshipType.ISARelationship = isaRelationship;
                        relationshipReverse.Relationship2 = relationship;
                        drivedEntity.Relationship.Add(relationshipReverse);

                        var    dbBaseEntity = projectContext.TableDrivedEntity.First(x => x.ID == BaseEntity.ID);
                        string PKColumns    = "";
                        string FKColumns    = "";
                        foreach (var primaryCol in dbBaseEntity.Table.Column.Where(x => x.PrimaryKey == true))
                        {
                            PKColumns += (PKColumns == "" ? "" : ",") + primaryCol.Name;
                            FKColumns += (FKColumns == "" ? "" : ",") + primaryCol.Name;
                            relationship.RelationshipColumns.Add(new RelationshipColumns()
                            {
                                Column = primaryCol, Column1 = primaryCol
                            });
                            relationshipReverse.RelationshipColumns.Add(new RelationshipColumns()
                            {
                                Column = primaryCol, Column1 = primaryCol
                            });
                        }
                        relationship.Name        = "(PK)" + BaseEntity.Name + "." + PKColumns + ">(FK)" + drivedEntity.Name + "." + FKColumns;
                        relationshipReverse.Name = "(FK)" + drivedEntity.Name + "." + FKColumns + ">(PK)" + BaseEntity.Name + "." + PKColumns;
                    }
                }
                if (drivedEntity.ID == 0)
                {
                    projectContext.TableDrivedEntity.Add(drivedEntity);
                }
                projectContext.SaveChanges();
                SetEntities(drivedEntity.ID);
            }


            //this.Close();
            //}
            //else
            //{
            //    var editEntity = projectContext.TableDrivedEntity.First(x => x.ID == MainEntity.ID);
            //    editEntity.Column.Clear();
            //    foreach (var item in dtgColumns.DataSource as List<ColumnDTO>)
            //    {
            //        if (item.Select)
            //            editEntity.Column.Add(projectContext.Column.First(x => x.ID == item.ID));
            //    }
            //    if (tabControl1.TabPages.Contains(tabRelationship))
            //    {
            //        foreach (var item in dtgRelationships.DataSource as List<RelationshipDTO>)
            //        {
            //            if (item.Select)
            //            {
            //                Relationship dbReverseRelationship = null;
            //                var dbRelationship = projectContext.Relationship.First(x => x.ID == item.ID);
            //                if (dbRelationship.Relationship2 != null)
            //                    dbReverseRelationship = dbRelationship.Relationship2;
            //                else
            //                    dbReverseRelationship = projectContext.Relationship.First(x => x.RelationshipID == item.ID);

            //                if (dbRelationship.TableDrivedEntity.TableDrivedEntity.TableID == MainEntity.TableID)
            //                {
            //                    if (dbRelationship.Relationship2 == null)
            //                        dbRelationship.Name = dbRelationship.Name.Replace("(PK)" + dbRelationship.TableDrivedEntity.Name + ".", "(PK)" + MainEntity.Name + ".");
            //                    else
            //                        dbRelationship.Name = dbRelationship.Name.Replace("(FK)" + dbRelationship.TableDrivedEntity.Name + ".", "(FK)" + MainEntity.Name + ".");
            //                    dbRelationship.TableDrivedEntity = editEntity;
            //                }
            //                if (dbRelationship.Entity1.TableDrivedEntity.TableID == MainEntity.TableID)
            //                {
            //                    if (dbRelationship.Relationship2 == null)
            //                        dbRelationship.Name = dbRelationship.Name.Replace("(FK)" + dbRelationship.TableDrivedEntity.Name + ".", "(FK)" + MainEntity.Name + ".");
            //                    else
            //                        dbRelationship.Name = dbRelationship.Name.Replace("(PK)" + dbRelationship.TableDrivedEntity.Name + ".", "(PK)" + MainEntity.Name + ".");
            //                    dbRelationship.Entity1 = editEntity;
            //                }
            //                if (dbReverseRelationship.TableDrivedEntity.TableDrivedEntity.TableID == MainEntity.TableID)
            //                {
            //                    if (dbReverseRelationship.Relationship2 == null)
            //                        dbReverseRelationship.Name = dbReverseRelationship.Name.Replace("(PK)" + dbRelationship.TableDrivedEntity.Name + ".", "(PK)" + MainEntity.Name + ".");
            //                    else
            //                        dbReverseRelationship.Name = dbReverseRelationship.Name.Replace("(FK)" + dbRelationship.TableDrivedEntity.Name + ".", "(FK)" + MainEntity.Name + ".");
            //                    dbReverseRelationship.TableDrivedEntity = editEntity;
            //                }
            //                if (dbReverseRelationship.Entity1.TableDrivedEntity.TableID == MainEntity.TableID)
            //                {
            //                    if (dbReverseRelationship.Relationship2 == null)
            //                        dbReverseRelationship.Name = dbReverseRelationship.Name.Replace("(FK)" + dbRelationship.TableDrivedEntity.Name + ".", "(FK)" + MainEntity.Name + ".");
            //                    else
            //                        dbReverseRelationship.Name = dbReverseRelationship.Name.Replace("(PK)" + dbRelationship.TableDrivedEntity.Name + ".", "(PK)" + MainEntity.Name + ".");
            //                    dbReverseRelationship.Entity1 = editEntity;
            //                }

            //            }
            //        }
            //    }


            //    //try
            //    //{
            //    //projectContext.SaveChanges();
            //    //}
            //    //catch (System.Data.TableDrivedEntity.Validation.DbEntityValidationException ed)
            //    //{
            //    //    foreach (var eve in ed.EntityValidationErrors)
            //    //    {
            //    //        Console.WriteLine("TableDrivedEntity of type \"{0}\" in state \"{1}\" has the following validation errors:",
            //    //            eve.Entry.TableDrivedEntity.GetType().Name, eve.Entry.State);
            //    //        foreach (var ve in eve.ValidationErrors)
            //    //        {
            //    //            Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
            //    //                ve.PropertyName, ve.ErrorMessage);
            //    //        }
            //    //    }
            //    //    throw;
            //    //}
            //    // this.Close();
            //}
        }