public static OneToOneRelationship[] GetInheritedOneToOneRelationships(ScriptObject scriptObject) { List <OneToOneRelationship> oneToOneRelationships = new List <OneToOneRelationship>(); OneToOneRelationship[] mapOneToOneRelationships = Script.GetDerivedOneToOneRelationships(scriptObject); if (mapOneToOneRelationships.Length == 0) { return(oneToOneRelationships.ToArray()); } if (mapOneToOneRelationships.Length > 1) { throw new Exception("Template does not support multiple inheritance"); } OneToOneRelationship mapOneToOneRelationship = null; if (mapOneToOneRelationships.Length == 1) { mapOneToOneRelationship = mapOneToOneRelationships[0]; oneToOneRelationships.Add(mapOneToOneRelationship); } if (mapOneToOneRelationship.ForeignRelationship.Parent != null) { oneToOneRelationships.AddRange(Script.GetInheritedOneToOneRelationships(mapOneToOneRelationship.ForeignRelationship.Parent)); } return(oneToOneRelationships.ToArray()); }
public List <IRelationship> findOneToOneRelationships(object o) { List <IRelationship> listOfRelationships = new List <IRelationship>(); Type type = o.GetType(); PropertyInfo[] props = type.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance); foreach (PropertyInfo prp in props) { MethodInfo strGetter = prp.GetGetMethod(nonPublic: true); object[] att = prp.GetCustomAttributes(typeof(OneToOneAttribute), false); var val = strGetter.Invoke(o, null); if (att.Length != 0) { object owner = o; object owned = val; OneToOneRelationship oneToOneRelationship = new OneToOneRelationship(owner, owned); listOfRelationships.Add(oneToOneRelationship); } } return(listOfRelationships); }
private void FormRelationship_Load(object sender, EventArgs e) { foreach (ScriptObject scriptObject in _scriptObjects) { comboBoxPrimaryScriptObject.Items.Add(scriptObject); } comboBoxPrimaryScriptObject.DisplayMember = "Alias"; comboBoxPrimaryScriptObject.ValueMember = "Name"; foreach (OneToManyRelationship oneToManyRelationship in _parent.OneToManyRelationships) { comboBoxIntermediatePrimaryRelationship.Items.Add(oneToManyRelationship); } comboBoxIntermediatePrimaryRelationship.DisplayMember = "Alias"; comboBoxIntermediatePrimaryRelationship.ValueMember = "Name"; foreach (ScriptObject scriptObject in _scriptObjects) { comboBoxForeignScriptObject.Items.Add(scriptObject); } comboBoxForeignScriptObject.DisplayMember = "Alias"; comboBoxForeignScriptObject.ValueMember = "Name"; groupBoxType.Enabled = false; string relationshipText = ""; switch (TypeOfRelationship.Name) { case "ManyToOneRelationship": relationshipText = "Many-To-One Relationship"; break; case "ManyToManyRelationship": relationshipText = "Many-To-Many Relationship"; break; case "OneToOneRelationship": relationshipText = "One-To-One Relationship"; break; case "OneToManyRelationship": relationshipText = "One-To-Many Relationship"; break; default: throw new NotImplementedException("Unexpected relationship type: " + _primaryRelationship.GetType().Name); } if (_primaryRelationship == null) { this.Text = string.Format("New {0}", relationshipText); comboBoxPrimaryScriptObject.SelectedItem = _parent; checkBoxIsBase.Enabled = true; } else { this.Text = string.Format("Edit {0} ({1})", _primaryRelationship.Name, relationshipText); textBoxName.Text = _primaryRelationship.Name; textBoxAlias.Text = _primaryRelationship.Alias; textBoxPath.Text = _primaryRelationship.Path; textBoxDescription.Text = _primaryRelationship.Description; comboBoxPrimaryScriptObject.SelectedItem = _parent; foreach (Column column in _primaryRelationship.PrimaryColumns) { ListViewItem item = new ListViewItem(column.Alias); item.SubItems.Add(column.Name); item.Tag = column; listViewPrimaryColumn.Items.Add(item); } comboBoxForeignScriptObject.SelectedItem = _primaryRelationship.ForeignScriptObject; foreach (Column column in _primaryRelationship.ForeignColumns) { ListViewItem item = new ListViewItem(column.Alias); item.SubItems.Add(column.Name); item.Tag = column; listViewForeignColumn.Items.Add(item); } UpdatePrimaryFilters(); UpdateForeignFilters(); if (_primaryRelationship.GetType() == typeof(ManyToManyRelationship)) { ManyToManyRelationship manyToManyRelationship = (ManyToManyRelationship)_primaryRelationship; comboBoxIntermediatePrimaryRelationship.SelectedItem = manyToManyRelationship.IntermediatePrimaryRelationship; comboBoxIntermediateForeignRelationship.SelectedItem = manyToManyRelationship.IntermediateForeignRelationship; tabStripRelationship.Pages.RemoveAt(0); tabStripRelationship.Pages.RemoveAt(1); } else { tabStripRelationship.Pages.RemoveAt(1); comboBoxPrimaryFilter.SelectedItem = _primaryRelationship.Filter; comboBoxForeignFilter.SelectedItem = _primaryRelationship.ForeignRelationship.Filter; } if (_primaryRelationship.GetType() == typeof(OneToOneRelationship)) { OneToOneRelationship relationship = (OneToOneRelationship)_primaryRelationship; checkBoxIsBase.Checked = relationship.IsBase; checkBoxIsBase.Visible = true; radioButtonOneToOne.Checked = true; } else if (_primaryRelationship.GetType() == typeof(OneToManyRelationship)) { OneToManyRelationship relationship = (OneToManyRelationship)_primaryRelationship; radioButtonOneToMany.Checked = true; } else if (_primaryRelationship.GetType() == typeof(ManyToOneRelationship)) { radioButtonManyToOne.Checked = true; } else if (_primaryRelationship.GetType() == typeof(ManyToManyRelationship)) { ManyToManyRelationship relationship = (ManyToManyRelationship)_primaryRelationship; radioButtonManyToMany.Checked = true; } if (!_primaryRelationship.IsUserDefined) { textBoxName.ReadOnly = true; comboBoxPrimaryColumn.Enabled = false; comboBoxPrimaryScriptObject.Enabled = false; buttonPrimaryColumnAdd.Enabled = false; listViewPrimaryColumn.Enabled = false; comboBoxPrimaryFilter.Enabled = false; comboBoxIntermediatePrimaryRelationship.Enabled = false; comboBoxIntermediateForeignRelationship.Enabled = false; comboBoxForeignColumn.Enabled = false; comboBoxForeignScriptObject.Enabled = false; buttonForeignColumnAdd.Enabled = false; listViewForeignColumn.Enabled = false; comboBoxForeignFilter.Enabled = false; buttonAddPrimaryFilter.Enabled = false; buttonAddIntermediatePrimaryRelationship.Enabled = false; buttonAddIntermediateForeignRelationship.Enabled = false; buttonAddForeignFilter.Enabled = false; } } listViewPrimaryColumn_Resize(null, null); listViewForeignColumn_Resize(null, null); //UpdatePrimaryFilters(); //UpdateForeignFilters(); }
private void InitialUpdateRelationships(IList <Model.Table> tables) { foreach (Model.Table table in tables) { foreach (Key key in table.Keys) { // Look for one to one relationship if (key.Type != DatabaseConstant.KeyType.Foreign) { continue; } if (IsOneToOneRelationship(key)) { Filter filter = Search.GetFilter(table.Filters, new Helper(DalAssemblyName).GetPrimaryKey((Model.Table)key.Parent).Name); OneToOneRelationship oneToOneRelationship = new OneToOneRelationship("One_" + key.Name, false, table, key.Columns, key.ReferencedTable, key.ReferencedKey.Columns, filter, false); table.AddRelationship(oneToOneRelationship); // Back other way Filter filter2 = Search.GetFilter(key.ReferencedKey.Parent.Filters, new Helper(DalAssemblyName).GetPrimaryKey((Model.Table)key.ReferencedKey.Parent).Name); OneToOneRelationship oneToOneRelationship2 = new OneToOneRelationship("One_" + key.Name, false, key.ReferencedTable, key.ReferencedKey.Columns, table, key.Columns, filter2, true); key.ReferencedTable.AddRelationship(oneToOneRelationship2); oneToOneRelationship.ForeignRelationship = oneToOneRelationship2; oneToOneRelationship2.ForeignRelationship = oneToOneRelationship; } else { Filter filter = Search.GetFilter(table.Filters, key.Name); ManyToOneRelationship manyToOneRelationship = new ManyToOneRelationship("One_" + key.Name, false, table, key.Columns, key.ReferencedTable, key.ReferencedKey.Columns, filter); table.AddRelationship(manyToOneRelationship); // Back other way Filter filter2 = Search.GetFilter(key.ReferencedTable.Filters, key.ReferencedKey.Name); OneToManyRelationship oneToManyRelationship = new OneToManyRelationship("Many_" + key.Name, false, key.ReferencedTable, key.ReferencedKey.Columns, table, key.Columns, filter2); key.ReferencedTable.AddRelationship(oneToManyRelationship); manyToOneRelationship.ForeignRelationship = oneToManyRelationship; oneToManyRelationship.ForeignRelationship = manyToOneRelationship; } } } // Temp list to search for foreign relationship List <Relationship> manyToManyRelationships = new List <Relationship>(); foreach (Model.Table table in tables) { foreach (ManyToOneRelationship manyToOneRelationship in table.ManyToOneRelationships) { string path = manyToOneRelationship.ForeignScriptObject.Name + " -> " + GetColumnNameList(manyToOneRelationship.ForeignColumns) + " -> " + manyToOneRelationship.PrimaryScriptObject.Name + " -> " + GetColumnNameList(manyToOneRelationship.PrimaryColumns); foreach (ManyToOneRelationship manyToOneRelationship2 in table.ManyToOneRelationships) { if (manyToOneRelationship2.Name == manyToOneRelationship.Name) { continue; } path += " -> " + manyToOneRelationship2.PrimaryScriptObject.Name + " -> " + GetColumnNameList(manyToOneRelationship2.PrimaryColumns) + " -> " + manyToOneRelationship2.ForeignScriptObject.Name + " -> " + GetColumnNameList(manyToOneRelationship2.ForeignColumns); ManyToManyRelationship manyToManyRelationship = new ManyToManyRelationship("Many_" + manyToOneRelationship.Name + "_" + manyToOneRelationship2.Name, false, (OneToManyRelationship)manyToOneRelationship.ForeignRelationship, manyToOneRelationship2, manyToOneRelationship2.ForeignRelationship.Filter); manyToOneRelationship.ForeignScriptObject.AddRelationship(manyToManyRelationship); manyToManyRelationships.Add(manyToManyRelationship); } } } #region Fill foreign relationships foreach (Model.Table table in tables) { foreach (ManyToManyRelationship manyToManyRelationship in table.ManyToManyRelationships) { string foreignRelationshipName = "Many_" + manyToManyRelationship.IntermediatePrimaryRelationship.ForeignRelationship.Name + "_" + manyToManyRelationship.IntermediateForeignRelationship.Name; ManyToManyRelationship foreignRelationship = (ManyToManyRelationship)Search.GetRelationship(manyToManyRelationships.ToArray(), foreignRelationshipName); manyToManyRelationship.ForeignRelationship = foreignRelationship; } } #endregion }
private void FormRelationship_Load(object sender, EventArgs e) { foreach (ScriptObject scriptObject in _scriptObjects) { comboBoxPrimaryScriptObject.Items.Add(scriptObject); } comboBoxPrimaryScriptObject.DisplayMember = "Alias"; comboBoxPrimaryScriptObject.ValueMember = "Name"; foreach (OneToManyRelationship oneToManyRelationship in _parent.OneToManyRelationships) { comboBoxIntermediatePrimaryRelationship.Items.Add(oneToManyRelationship); } comboBoxIntermediatePrimaryRelationship.DisplayMember = "Alias"; comboBoxIntermediatePrimaryRelationship.ValueMember = "Name"; foreach (ScriptObject scriptObject in _scriptObjects) { comboBoxForeignScriptObject.Items.Add(scriptObject); } comboBoxForeignScriptObject.DisplayMember = "Alias"; comboBoxForeignScriptObject.ValueMember = "Name"; groupBoxType.Enabled = false; if (_primaryRelationship == null) { this.Text = "Add New Relationship"; comboBoxPrimaryScriptObject.SelectedItem = _parent; checkBoxIsBase.Enabled = true; } else { this.Text = "Edit Relationship " + _primaryRelationship.Name; textBoxName.Text = _primaryRelationship.Name; textBoxAlias.Text = _primaryRelationship.Alias; textBoxPath.Text = _primaryRelationship.Path; comboBoxPrimaryScriptObject.SelectedItem = _parent; foreach (Column column in _primaryRelationship.PrimaryColumns) { ListViewItem item = new ListViewItem(column.Alias); item.SubItems.Add(column.Alias); item.Tag = column; listViewPrimaryColumn.Items.Add(item); } comboBoxForeignScriptObject.SelectedItem = _primaryRelationship.ForeignScriptObject; foreach (Column column in _primaryRelationship.ForeignColumns) { ListViewItem item = new ListViewItem(column.Alias); item.SubItems.Add(column.Alias); item.Tag = column; listViewForeignColumn.Items.Add(item); } if (_primaryRelationship.GetType() == typeof(ManyToManyRelationship)) { ManyToManyRelationship manyToManyRelationship = (ManyToManyRelationship)_primaryRelationship; comboBoxIntermediatePrimaryRelationship.SelectedItem = manyToManyRelationship.IntermediatePrimaryRelationship; comboBoxIntermediateForeignRelationship.SelectedItem = manyToManyRelationship.IntermediateForeignRelationship; tabStripRelationship.Pages.RemoveAt(0); tabStripRelationship.Pages.RemoveAt(1); } else { tabStripRelationship.Pages.RemoveAt(1); comboBoxPrimaryFilter.SelectedItem = _primaryRelationship.Filter; comboBoxForeignFilter.SelectedItem = _primaryRelationship.ForeignRelationship.Filter; } if (_primaryRelationship.GetType() == typeof(OneToOneRelationship)) { OneToOneRelationship relationship = (OneToOneRelationship)_primaryRelationship; checkBoxIsBase.Checked = relationship.IsBase; checkBoxIsBase.Visible = true; radioButtonOneToOne.Checked = true; } else if (_primaryRelationship.GetType() == typeof(OneToManyRelationship)) { OneToManyRelationship relationship = (OneToManyRelationship)_primaryRelationship; radioButtonOneToMany.Checked = true; } else if (_primaryRelationship.GetType() == typeof(ManyToOneRelationship)) { radioButtonManyToOne.Checked = true; } else if (_primaryRelationship.GetType() == typeof(ManyToManyRelationship)) { ManyToManyRelationship relationship = (ManyToManyRelationship)_primaryRelationship; radioButtonManyToMany.Checked = true; } if (!_primaryRelationship.IsUserDefined) { textBoxName.ReadOnly = true; comboBoxPrimaryColumn.Enabled = false; comboBoxPrimaryScriptObject.Enabled = false; buttonPrimaryColumnAdd.Enabled = false; listViewPrimaryColumn.Enabled = false; comboBoxPrimaryFilter.Enabled = false; comboBoxIntermediatePrimaryRelationship.Enabled = false; comboBoxIntermediateForeignRelationship.Enabled = false; comboBoxForeignColumn.Enabled = false; comboBoxForeignScriptObject.Enabled = false; buttonForeignColumnAdd.Enabled = false; listViewForeignColumn.Enabled = false; comboBoxForeignFilter.Enabled = false; buttonAddPrimaryFilter.Enabled = false; buttonAddIntermediatePrimaryRelationship.Enabled = false; buttonAddIntermediateForeignRelationship.Enabled = false; buttonAddForeignFilter.Enabled = false; } } listViewPrimaryColumn_Resize(null, null); listViewForeignColumn_Resize(null, null); }