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