コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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
        }
コード例 #5
0
        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);
        }