//public List<ISARelationshipDTO> GetISARelationships(int tableDrivedEntityID) //{ // List<ISARelationshipDTO> result = new List<ISARelationshipDTO>(); // using (var projectContext = new MyIdeaEntities()) // { // var list = projectContext.ISARelationship.Where(x => x.TableDrivedEntityID1 == tableDrivedEntityID || x.TableDrivedEntityID2 == tableDrivedEntityID); // foreach (var item in list) // { // result.Add(ToISARelationshipDTO(item)); // } // } // return result; //} private ISARelationshipDTO ToISARelationshipDTO(ISARelationship item) { ISARelationshipDTO result = new ISARelationshipDTO(); result.Name = item.Name; result.ID = item.ID; result.IsGeneralization = item.IsGeneralization == true; result.IsTolatParticipation = item.IsTolatParticipation; result.IsDisjoint = item.IsDisjoint; result.SuperTypeEntities = ""; foreach (var superType in item.SuperToSubRelationshipType) { if (!result.SuperTypeEntities.Contains(superType.RelationshipType.Relationship.TableDrivedEntity.Name)) { result.SuperTypeEntities += (result.SuperTypeEntities == "" ? "" : ",") + superType.RelationshipType.Relationship.TableDrivedEntity.Name; } } result.SubTypeEntities = ""; foreach (var subType in item.SubToSuperRelationshipType) { result.SubTypeEntities += (result.SubTypeEntities == "" ? "" : ",") + subType.RelationshipType.Relationship.TableDrivedEntity.Name; } return(result); }
public int Save(ISARelationshipDTO item) { using (var projectContext = new MyIdeaEntities()) { ISARelationship dbItem = null; if (item.ID == 0) { dbItem = new ISARelationship(); projectContext.ISARelationship.Add(dbItem); } else { dbItem = projectContext.ISARelationship.First(x => x.ID == item.ID); } dbItem.Name = item.Name; dbItem.IsDisjoint = item.IsDisjoint; dbItem.IsGeneralization = item.IsGeneralization; dbItem.IsSpecialization = !item.IsSpecialization; dbItem.IsTolatParticipation = item.IsTolatParticipation; projectContext.SaveChanges(); return(dbItem.ID); } }
public int Save(TableDrivedEntityDTO baseEntity, TableDrivedEntityDTO drivedEntity, bool inheritance, bool isTolatParticipation, bool isDisjoint) { using (var projectContext = new MyIdeaEntities()) { foreach (var item in drivedEntity.Relationships) { var dbRelationship = projectContext.Relationship.First(x => x.ID == item.ID); Relationship dbReverseRelationship = null; 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.TableDrivedEntityID1 = drivedEntity.ID; } 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.TableDrivedEntityID2 = drivedEntity.ID; } 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.TableDrivedEntityID1 = drivedEntity.ID; } 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.TableDrivedEntityID2 = drivedEntity.ID; } } if (inheritance && !(drivedEntity.ID == baseEntity.ID)) { ISARelationship isaRelationship = null; var sampleSuperToSub = projectContext.Relationship.FirstOrDefault(x => x.TableDrivedEntityID1 == baseEntity.ID && x.RelationshipType != null && x.RelationshipType.SuperToSubRelationshipType != null); if (sampleSuperToSub != null) { isaRelationship = sampleSuperToSub.RelationshipType.SuperToSubRelationshipType.ISARelationship; } if (isaRelationship == null) { isaRelationship = new ISARelationship(); } isaRelationship.IsTolatParticipation = isTolatParticipation; isaRelationship.IsDisjoint = isDisjoint; string subTypesStr = ""; foreach (var relationship in isaRelationship.SuperToSubRelationshipType) { if (relationship.RelationshipType.Relationship.TableDrivedEntity1.ID != baseEntity.ID) { subTypesStr += (subTypesStr == "" ? "" : ",") + relationship.RelationshipType.Relationship.TableDrivedEntity1.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(); return(0); } }