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")); }
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")); }
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); }
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); }
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")); }
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; }
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; }