public void String_Type_Defaults_To_NText()
        {
            var proc = new OneToOneEntityProcessor();
            var column = proc.CreateColumn(new PropertyImpl("Property1") { Type = "System.String" });

            Assert.That(column.Name, Is.EqualTo("Property1"));
            Assert.That(column.Datatype, Is.EqualTo("ntext"));
        }
Пример #2
0
        public void It_Creates_A_Simple_Table()
        {
            var proc  = new OneToOneEntityProcessor();
            var table = proc.CreateTable(entity);

            Assert.That(table.Name, Is.EqualTo("Entity1s"), "Name should be the Entity Name pluralized");
            Assert.That(table.Columns, Has.Count(3));
        }
        public void The_Type_Takes_The_Maximum_Length_Into_Account()
        {
            var proc = new OneToOneEntityProcessor();
            var column = proc.CreateColumn(new PropertyImpl("Property1") { Type = "System.String", ValidationOptions = new ValidationOptions {MaximumLength = 50} });

            Assert.That(column.Name, Is.EqualTo("Property1"));
            Assert.That(column.Size, Is.EqualTo(50));
            Assert.That(column.Datatype, Is.EqualTo("nvarchar"));
        }
Пример #4
0
        public void String_Type_Defaults_To_NText()
        {
            var proc   = new OneToOneEntityProcessor();
            var column = proc.CreateColumn(new PropertyImpl("Property1")
            {
                Type = "System.String"
            });

            Assert.That(column.Name, Is.EqualTo("Property1"));
            Assert.That(column.Datatype, Is.EqualTo("ntext"));
        }
Пример #5
0
        void form_CreateNewTableFromEntity(object sender, EventArgs e)
        {
            if (AnyContainersNull(entity))
            {
                throw new InvalidOperationException("Cannot create a new table because one of the parent containers is missing.");
            }

            var processor = new OneToOneEntityProcessor();
            var table     = processor.CreateTable(entity);

            entity.EntitySet.MappingSet.Database.AddEntity(table);
        }
Пример #6
0
        public void It_Creates_A_Single_Primary_Key_With_One_Column()
        {
            var proc  = new OneToOneEntityProcessor();
            var table = proc.CreateTable(entity);

            Assert.That(table.Keys, Has.Count(1));
            var firstKey = table.Keys.First();

            Assert.That(firstKey.Keytype, Is.EqualTo(DatabaseKeyType.Primary));
            Assert.That(firstKey.Columns, Has.Count(1));
            Assert.That(firstKey.Columns[0], Is.SameAs(table.Columns[0]));
        }
        public void It_Sets_The_IsKeyProperty_Property()
        {
            IColumn column = new Column("column");

            column.InPrimaryKey = true;
            column.Datatype     = "int";


            OneToOneEntityProcessor proc = new OneToOneEntityProcessor();
            var property = proc.CreateProperty(column);

            Assert.That(property.IsKeyProperty, Is.True);
        }
Пример #8
0
        public void The_Type_Takes_The_Maximum_Length_Into_Account()
        {
            var proc   = new OneToOneEntityProcessor();
            var column = proc.CreateColumn(new PropertyImpl("Property1")
            {
                Type = "System.String", ValidationOptions = new ValidationOptions {
                    MaximumLength = 50
                }
            });

            Assert.That(column.Name, Is.EqualTo("Property1"));
            Assert.That(column.Size, Is.EqualTo(50));
            Assert.That(column.Datatype, Is.EqualTo("nvarchar"));
        }
        public void It_Sets_The_IsKeyProperty_Property()
        {
            IColumn column = new Column("column");
            column.InPrimaryKey = true;
            column.Datatype = "int";

            OneToOneEntityProcessor proc = new OneToOneEntityProcessor();
            var property = proc.CreateProperty(column);

            Assert.That(property.IsKeyProperty, Is.True);
        }
        public void It_Creates_A_Single_Primary_Key_With_One_Column()
        {
            var proc = new OneToOneEntityProcessor();
            var table = proc.CreateTable(entity);

            Assert.That(table.Keys, Has.Count(1));
            var firstKey = table.Keys.First();
            Assert.That(firstKey.Keytype, Is.EqualTo(DatabaseKeyType.Primary));
            Assert.That(firstKey.Columns, Has.Count(1));
            Assert.That(firstKey.Columns[0], Is.SameAs(table.Columns[0]));
        }
        public void It_Creates_A_Simple_Table()
        {
            var proc = new OneToOneEntityProcessor();
            var table = proc.CreateTable(entity);

            Assert.That(table.Name, Is.EqualTo("Entity1s"), "Name should be the Entity Name pluralized");
            Assert.That(table.Columns, Has.Count(3));
        }
        private void Save()
        {
            if (RelatedTable == null)
            {
                MessageBox.Show(this, "You need to select a foreign table.", "Foreign table missing", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            if (RelatedColumnCombos.Count == 0)
            {
                MessageBox.Show(this, "No columns selected.", "Columns missing", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            bool mainColsAreUnique;            // = checkBoxPrimaryUnique.Checked ? true : ColumnsAreUnique(GetMainColumns());
            bool relatedColsAreUnique;         // = checkBoxForeignUnique.Checked ? true : ColumnsAreUnique(GetRelatedColumns());

            // Check if the Main columns are unique
            if (checkBoxPrimaryUnique.Checked)
            {
                mainColsAreUnique = true;
            }
            else
            {
                List <Column> mainColumns = GetMainColumns();
                bool          selectedColsContainAllPrimaryCols = MainTable.ColumnsInPrimaryKey.Count() > 0;

                foreach (var col in MainTable.ColumnsInPrimaryKey)
                {
                    if (!mainColumns.Contains(col))
                    {
                        selectedColsContainAllPrimaryCols = false;
                        break;
                    }
                }
                if (selectedColsContainAllPrimaryCols)
                {
                    mainColsAreUnique = true;
                }
                else
                {
                    mainColsAreUnique = ColumnsAreUnique(mainColumns);
                }
            }
            // Check if the Realted columns are unique
            if (checkBoxForeignUnique.Checked)
            {
                relatedColsAreUnique = true;
            }
            else
            {
                List <Column> relatedColumns = GetRelatedColumns();
                bool          selectedColsContainAllPrimaryCols = RelatedTable.ColumnsInPrimaryKey.Count() > 0;

                foreach (var col in RelatedTable.ColumnsInPrimaryKey)
                {
                    if (!relatedColumns.Contains(col))
                    {
                        selectedColsContainAllPrimaryCols = false;
                        break;
                    }
                }
                if (selectedColsContainAllPrimaryCols)
                {
                    relatedColsAreUnique = true;
                }
                else
                {
                    relatedColsAreUnique = ColumnsAreUnique(relatedColumns);
                }
            }

            IKey mainTableKey = null;

            foreach (var key in MainTable.Keys)
            {
                if (MainColumnCombos.Count == key.Columns.Count)
                {
                    bool keyMatches = true;

                    foreach (var combo in MainColumnCombos)
                    {
                        if (!key.Columns.Contains((Column)((DisplayItem)combo.SelectedItem).Value))
                        {
                            keyMatches = false;
                            break;
                        }
                    }
                    if (keyMatches)
                    {
                        // Key is found
                        mainTableKey = key;
                        break;
                    }
                }
            }
            IKey relatedTableKey = null;

            foreach (var key in RelatedTable.Keys)
            {
                if (RelatedColumnCombos.Count == key.Columns.Count)
                {
                    bool keyMatches = true;

                    foreach (var combo in RelatedColumnCombos)
                    {
                        // Can't have two primary keys, but there might be a foreign key on the same columns, so skip for now. Otherwise we'll need to create a new foreign key anyway.
                        if (!key.Columns.Contains((Column)((DisplayItem)combo.SelectedItem).Value) &&
                            !((mainTableKey != null && mainTableKey.Keytype == DatabaseKeyType.Primary) && key.Keytype == DatabaseKeyType.Primary))
                        {
                            keyMatches = false;
                            break;
                        }
                    }
                    if (keyMatches)
                    {
                        // Key is found
                        relatedTableKey = key;
                        break;
                    }
                }
            }
            if (mainTableKey != null &&
                relatedTableKey != null)
            {
                // Both keys exist, so let's check whether this relationship already exists
                foreach (var relationship in MainTable.Relationships)
                {
                    if ((relationship.PrimaryKey == mainTableKey &&
                         relationship.ForeignKey == relatedTableKey) ||
                        (relationship.PrimaryKey == relatedTableKey &&
                         relationship.ForeignKey == mainTableKey))
                    {
                        MessageBox.Show(this, "This relationship already exists.", "Relationship exists", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }
                }
            }
            if (mainTableKey != null &&
                relatedTableKey != null &&
                (mainTableKey.Keytype == DatabaseKeyType.Primary &&
                 relatedTableKey.Keytype == DatabaseKeyType.Primary))
            {
                // A relationship can't have two primary keys, so we'll need to create a new 'foreign-key'
                relatedTableKey = null;
            }
            RelatedTable = (Table)comboBoxForeignTable.SelectedItem;

            if (mainTableKey == null)
            {
                mainTableKey = new Key
                {
                    Name          = string.Format("FK_{0}_{1}", MainTable.Name, RelatedTable.Name).GetNextName(MainTable.Relationships.Select(r => r.Name).ToList()),
                    IsUserDefined = true,
                    Keytype       = DatabaseKeyType.Foreign,
                    Parent        = MainTable,
                    IsUnique      = mainColsAreUnique
                };
                foreach (Column column in GetMainColumns())
                {
                    mainTableKey.AddColumn(column.Name);
                }
            }
            if (relatedTableKey == null)
            {
                relatedTableKey = new Key
                {
                    Name          = string.Format("FK_{0}_{1}", RelatedTable.Name, MainTable.Name).GetNextName(RelatedTable.Relationships.Select(r => r.Name).ToList()),
                    IsUserDefined = true,
                    Keytype       = DatabaseKeyType.Foreign,
                    Parent        = RelatedTable,
                    IsUnique      = relatedColsAreUnique
                };
                foreach (Column column in GetRelatedColumns())
                {
                    relatedTableKey.AddColumn(column.Name);
                }
            }
            mainTableKey.ReferencedKey    = relatedTableKey;
            relatedTableKey.ReferencedKey = mainTableKey;

            if (Relationship == null)
            {
                Relationship newRelationship = new RelationshipImpl();
                newRelationship.Database      = MainTable.Database;
                newRelationship.IsUserDefined = true;
                newRelationship.Schema        = MainTable.Schema;

                if (relatedTableKey.Keytype == DatabaseKeyType.Primary)
                {
                    newRelationship.AddThisTo(RelatedTable, MainTable);
                    newRelationship.Name = string.Format("FK_NH_{0}_{1}", RelatedTable, MainTable).GetNextName(RelatedTable.Relationships.Select(r => r.Name).ToList());
                    //newRelationship.PrimaryCardinality = mainColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    //newRelationship.ForeignCardinality = relatedColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    newRelationship.ForeignCardinality = mainColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    newRelationship.PrimaryCardinality = relatedColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;

                    newRelationship.PrimaryKey = relatedTableKey;
                    newRelationship.ForeignKey = mainTableKey;

                    if (!newRelationship.PrimaryTable.Keys.Contains(relatedTableKey))
                    {
                        newRelationship.PrimaryTable.AddKey(relatedTableKey);
                    }

                    if (!newRelationship.ForeignTable.Keys.Contains(mainTableKey))
                    {
                        newRelationship.ForeignTable.AddKey(mainTableKey);
                    }
                }
                else
                {
                    newRelationship.AddThisTo(MainTable, RelatedTable);
                    newRelationship.Name = string.Format("FK_NH_{0}_{1}", MainTable, RelatedTable);
                    //newRelationship.PrimaryCardinality = mainColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    //newRelationship.ForeignCardinality = relatedColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    newRelationship.ForeignCardinality = mainColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    newRelationship.PrimaryCardinality = relatedColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;

                    newRelationship.PrimaryKey = mainTableKey;
                    newRelationship.ForeignKey = relatedTableKey;

                    if (!newRelationship.PrimaryTable.Keys.Contains(mainTableKey))
                    {
                        newRelationship.PrimaryTable.AddKey(mainTableKey);
                    }

                    if (!newRelationship.ForeignTable.Keys.Contains(relatedTableKey))
                    {
                        newRelationship.ForeignTable.AddKey(relatedTableKey);
                    }
                }
                //MainTable.Database.AddRelationship(newRelationship);
                OneToOneEntityProcessor proc = new OneToOneEntityProcessor(MainTable.Database.MappingSet.EntitySet.Entities.Select(e => e.Name));
                //List<ITable> tables = new List<ITable>();
                //tables.Add((ITable)MainTable);
                //proc.CreateOneToOneMappingsFor(tables, MainTable.Database.MappingSet);
                //proc.CreateReference(newRelationship, MainTable.Database.MappingSet.EntitySet);

                MappingProcessor.ProcessRelationshipInternal(MainTable.Database.MappingSet, newRelationship, proc);

                if (RelationshipAdded != null)
                {
                    RelationshipAdded(null, null);
                }
            }
            this.Visible = false;
        }
Пример #13
0
        void form_CreateNewTableFromEntity(object sender, EventArgs e)
        {
            if(AnyContainersNull(entity))
            {
                throw new InvalidOperationException("Cannot create a new table because one of the parent containers is missing.");
            }

            var processor = new OneToOneEntityProcessor();
            var table = processor.CreateTable(entity);

            entity.EntitySet.MappingSet.Database.AddEntity(table);
        }
        private void Save()
        {
            if (RelatedTable == null)
            {
                MessageBox.Show(this, "You need to select a foreign table.", "Foreign table missing", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            if (RelatedColumnCombos.Count == 0)
            {
                MessageBox.Show(this, "No columns selected.", "Columns missing", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            bool mainColsAreUnique;// = checkBoxPrimaryUnique.Checked ? true : ColumnsAreUnique(GetMainColumns());
            bool relatedColsAreUnique;// = checkBoxForeignUnique.Checked ? true : ColumnsAreUnique(GetRelatedColumns());

            // Check if the Main columns are unique
            if (checkBoxPrimaryUnique.Checked)
                mainColsAreUnique = true;
            else
            {
                List<Column> mainColumns = GetMainColumns();
                bool selectedColsContainAllPrimaryCols = MainTable.ColumnsInPrimaryKey.Count() > 0;

                foreach (var col in MainTable.ColumnsInPrimaryKey)
                {
                    if (!mainColumns.Contains(col))
                    {
                        selectedColsContainAllPrimaryCols = false;
                        break;
                    }
                }
                if (selectedColsContainAllPrimaryCols)
                    mainColsAreUnique = true;
                else
                    mainColsAreUnique = ColumnsAreUnique(mainColumns);
            }
            // Check if the Realted columns are unique
            if (checkBoxForeignUnique.Checked)
                relatedColsAreUnique = true;
            else
            {
                List<Column> relatedColumns = GetRelatedColumns();
                bool selectedColsContainAllPrimaryCols = RelatedTable.ColumnsInPrimaryKey.Count() > 0;

                foreach (var col in RelatedTable.ColumnsInPrimaryKey)
                {
                    if (!relatedColumns.Contains(col))
                    {
                        selectedColsContainAllPrimaryCols = false;
                        break;
                    }
                }
                if (selectedColsContainAllPrimaryCols)
                    relatedColsAreUnique = true;
                else
                    relatedColsAreUnique = ColumnsAreUnique(relatedColumns);
            }

            IKey mainTableKey = null;

            foreach (var key in MainTable.Keys)
            {
                if (MainColumnCombos.Count == key.Columns.Count)
                {
                    bool keyMatches = true;

                    foreach (var combo in MainColumnCombos)
                    {
                        if (!key.Columns.Contains((Column)((DisplayItem)combo.SelectedItem).Value))
                        {
                            keyMatches = false;
                            break;
                        }
                    }
                    if (keyMatches)
                    {
                        // Key is found
                        mainTableKey = key;
                        break;
                    }
                }
            }
            IKey relatedTableKey = null;

            foreach (var key in RelatedTable.Keys)
            {
                if (RelatedColumnCombos.Count == key.Columns.Count)
                {
                    bool keyMatches = true;

                    foreach (var combo in RelatedColumnCombos)
                    {
                        // Can't have two primary keys, but there might be a foreign key on the same columns, so skip for now. Otherwise we'll need to create a new foreign key anyway.
                        if (!key.Columns.Contains((Column)((DisplayItem)combo.SelectedItem).Value) &&
                            !((mainTableKey != null && mainTableKey.Keytype == DatabaseKeyType.Primary) && key.Keytype == DatabaseKeyType.Primary))
                        {
                            keyMatches = false;
                            break;
                        }
                    }
                    if (keyMatches)
                    {
                        // Key is found
                        relatedTableKey = key;
                        break;
                    }
                }
            }
            if (mainTableKey != null &&
                relatedTableKey != null)
            {
                // Both keys exist, so let's check whether this relationship already exists
                foreach (var relationship in MainTable.Relationships)
                {
                    if ((relationship.PrimaryKey == mainTableKey &&
                        relationship.ForeignKey == relatedTableKey) ||
                        (relationship.PrimaryKey == relatedTableKey &&
                        relationship.ForeignKey == mainTableKey))
                    {
                        MessageBox.Show(this, "This relationship already exists.", "Relationship exists", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }
                }
            }
            if (mainTableKey != null &&
                relatedTableKey != null &&
                (mainTableKey.Keytype == DatabaseKeyType.Primary &&
                relatedTableKey.Keytype == DatabaseKeyType.Primary))
            {
                // A relationship can't have two primary keys, so we'll need to create a new 'foreign-key'
                relatedTableKey = null;
            }
            RelatedTable = (Table)comboBoxForeignTable.SelectedItem;

            if (mainTableKey == null)
            {
                mainTableKey = new Key
                    {
                        Name = string.Format("FK_{0}_{1}", MainTable.Name, RelatedTable.Name).GetNextName(MainTable.Relationships.Select(r => r.Name).ToList()),
                        IsUserDefined = true,
                        Keytype = DatabaseKeyType.Foreign,
                        Parent = MainTable,
                        IsUnique = mainColsAreUnique
                    };
                foreach (Column column in GetMainColumns())
                    mainTableKey.AddColumn(column.Name);
            }
            if (relatedTableKey == null)
            {
                relatedTableKey = new Key
                {
                    Name = string.Format("FK_{0}_{1}", RelatedTable.Name, MainTable.Name).GetNextName(RelatedTable.Relationships.Select(r => r.Name).ToList()),
                    IsUserDefined = true,
                    Keytype = DatabaseKeyType.Foreign,
                    Parent = RelatedTable,
                    IsUnique = relatedColsAreUnique
                };
                foreach (Column column in GetRelatedColumns())
                    relatedTableKey.AddColumn(column.Name);
            }
            mainTableKey.ReferencedKey = relatedTableKey;
            relatedTableKey.ReferencedKey = mainTableKey;

            if (Relationship == null)
            {
                Relationship newRelationship = new RelationshipImpl();
                newRelationship.Database = MainTable.Database;
                newRelationship.IsUserDefined = true;
                newRelationship.Schema = MainTable.Schema;

                if (relatedTableKey.Keytype == DatabaseKeyType.Primary)
                {
                    newRelationship.AddThisTo(RelatedTable, MainTable);
                    newRelationship.Name = string.Format("FK_NH_{0}_{1}", RelatedTable, MainTable).GetNextName(RelatedTable.Relationships.Select(r => r.Name).ToList());
                    //newRelationship.PrimaryCardinality = mainColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    //newRelationship.ForeignCardinality = relatedColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    newRelationship.ForeignCardinality = mainColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    newRelationship.PrimaryCardinality = relatedColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;

                    newRelationship.PrimaryKey = relatedTableKey;
                    newRelationship.ForeignKey = mainTableKey;

                    if (!newRelationship.PrimaryTable.Keys.Contains(relatedTableKey))
                        newRelationship.PrimaryTable.AddKey(relatedTableKey);

                    if (!newRelationship.ForeignTable.Keys.Contains(mainTableKey))
                        newRelationship.ForeignTable.AddKey(mainTableKey);
                }
                else
                {
                    newRelationship.AddThisTo(MainTable, RelatedTable);
                    newRelationship.Name = string.Format("FK_NH_{0}_{1}", MainTable, RelatedTable);
                    //newRelationship.PrimaryCardinality = mainColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    //newRelationship.ForeignCardinality = relatedColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    newRelationship.ForeignCardinality = mainColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;
                    newRelationship.PrimaryCardinality = relatedColsAreUnique ? ArchAngel.Interfaces.Cardinality.One : ArchAngel.Interfaces.Cardinality.Many;

                    newRelationship.PrimaryKey = mainTableKey;
                    newRelationship.ForeignKey = relatedTableKey;

                    if (!newRelationship.PrimaryTable.Keys.Contains(mainTableKey))
                        newRelationship.PrimaryTable.AddKey(mainTableKey);

                    if (!newRelationship.ForeignTable.Keys.Contains(relatedTableKey))
                        newRelationship.ForeignTable.AddKey(relatedTableKey);
                }
                //MainTable.Database.AddRelationship(newRelationship);
                OneToOneEntityProcessor proc = new OneToOneEntityProcessor(MainTable.Database.MappingSet.EntitySet.Entities.Select(e => e.Name));
                //List<ITable> tables = new List<ITable>();
                //tables.Add((ITable)MainTable);
                //proc.CreateOneToOneMappingsFor(tables, MainTable.Database.MappingSet);
                //proc.CreateReference(newRelationship, MainTable.Database.MappingSet.EntitySet);

                MappingProcessor.ProcessRelationshipInternal(MainTable.Database.MappingSet, newRelationship, proc);

                if (RelationshipAdded != null)
                    RelationshipAdded(null, null);
            }
            this.Visible = false;
        }