private static DatabaseSchema Arrange()
        {
            const string key1 = "OriginKey1";
            const string key2 = "OriginKey2";

            var schema = new DatabaseSchema(null, null);
            var table  = schema.AddTable("Products")
                         .AddColumn("ProductId", "INT").AddPrimaryKey().AddIdentity()
                         .AddColumn("ProductName", "NVARCHAR")
                         .AddColumn(key1, "NVARCHAR").AddForeignKey("Origin")
                         .AddColumn(key2, "NVARCHAR")
                         .Table;

            table.ForeignKeys.Single().AddColumn(table.FindColumn(key2));

            var pk = new DatabaseConstraint {
                ConstraintType = ConstraintType.PrimaryKey,
            };

            pk.Columns.Add(key1);
            pk.Columns.Add(key2);
            schema.AddTable("Origin")
            .AddColumn <string>(key1).AddPrimaryKey()
            .AddColumn <string>(key2)
            .Table.AddConstraint(pk);

            schema.DataTypes.Add(new DataType("INT", "System.Int32"));
            schema.DataTypes.Add(new DataType("NVARCHAR", "System.String"));
            DatabaseSchemaFixer.UpdateDataTypes(schema);
            //make sure .Net names are assigned
            PrepareSchemaNames.Prepare(schema, new Namer());

            return(schema);
        }
        public void WriteSharedPrimaryKeyTest()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);

            schema
            .AddTable("vehicle")
            .AddColumn <string>("regnum").AddPrimaryKey().AddLength(25)
            .AddColumn <string>("model").AddLength(32)
            .AddTable("car")
            .AddColumn <string>("regnum").AddLength(25).AddPrimaryKey().AddForeignKey("fk", "vehicle")
            .AddColumn <int>("doors");
            //make sure it's all tied up
            DatabaseSchemaFixer.UpdateReferences(schema);
            //make sure .Net names are assigned
            PrepareSchemaNames.Prepare(schema, new Namer());
            var table = schema.FindTableByName("car");

            var cw = new ClassWriter(table, new CodeWriterSettings {
                CodeTarget = CodeTarget.PocoEntityCodeFirst
            });

            //act
            var txt = cw.Write();

            //assert
            var hasScalarKey  = txt.Contains("public string Regnum { get; set; }");
            var hasForeignKey = txt.Contains("public virtual Vehicle Vehicle { get; set; }");

            Assert.IsTrue(hasScalarKey);
            Assert.IsTrue(hasForeignKey);
        }
        /// <summary>
        /// Gets all tables (plus constraints, indexes and triggers).
        /// </summary>
        public IList <DatabaseTable> AllTables(CancellationToken ct)
        {
            if (ct.IsCancellationRequested)
            {
                return(new List <DatabaseTable>());
            }
            RaiseReadingProgress(SchemaObjectType.Tables);

            IList <DatabaseTable> tables;

            using (_readerAdapter.CreateConnection())
            {
                var builder = new TableBuilder(_readerAdapter);
                tables = builder.Execute(ct);
            }
            if (ct.IsCancellationRequested)
            {
                return(tables);
            }

            DatabaseSchema.Tables.Clear();
            DatabaseSchema.Tables.AddRange(tables);

            UpdateReferences();
            if (DatabaseSchema.DataTypes.Count == 0)
            {
                DataTypes(); //force load of datatypes
            }
            else
            {
                DatabaseSchemaFixer.UpdateDataTypes(DatabaseSchema);
            }

            return(tables);
        }
Exemple #4
0
        public void MappingNameTest()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);
            var table  = schema.AddTable("Products")
                         .AddColumn("ProductId", DbType.Int32).AddPrimaryKey().AddIdentity()
                         .Table;

            table.NetName = "Product";
            //we need datatypes
            schema.DataTypes.Add(new DataType("INT", "System.Int32"));
            //make sure it's all tied up
            DatabaseSchemaFixer.UpdateReferences(schema);

            var codeWriterSettings = new CodeWriterSettings {
                CodeTarget = CodeTarget.PocoEntityCodeFirst
            };
            var target = new CodeFirstMappingWriter(table, codeWriterSettings, new MappingNamer());

            //act
            target.Write();
            //now the name is assigned
            var className = target.MappingClassName;

            //assert
            Assert.AreEqual("ProductMapping", className);
        }
        public void IsImageTest()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);
            var table  = schema.AddTable("Products")
                         .AddColumn("ProductId", DbType.Int32).AddPrimaryKey().AddIdentity()
                         .AddColumn("Picture", "image")
                         .Table;

            //we need datatypes
            schema.DataTypes.Add(new DataType("INT", "System.Int32"));
            schema.DataTypes.Add(new DataType("image", "System.Byte[]"));
            //make sure it's all tied up
            DatabaseSchemaFixer.UpdateReferences(schema);

            var target = new CodeFirstMappingWriter(table, new CodeWriterSettings(), new MappingNamer());

            //act
            var result = target.Write();

            //assert
            //EF CF will default to varbinary so we must specify
            var hasImageType = result.Contains("Property(x => x.Picture).HasColumnType(\"image\")");

            Assert.IsTrue(hasImageType);
        }
Exemple #6
0
        private static DatabaseSchema Arrange()
        {
            var schema = new DatabaseSchema(null, null);

            schema.AddTable("Categories")
            .AddColumn <int>("CategoryId").AddPrimaryKey()
            .AddColumn <string>("CategoryName")

            .AddTable("Products")
            .AddColumn <int>("ProductId").AddPrimaryKey()
            .AddColumn <string>("ProductName");

            var assoc =
                schema.AddTable("ProductCategories")
                .AddColumn <int>("CategoryId").AddPrimaryKey().AddForeignKey("Categories")
                .AddColumn <int>("ProductId").AddForeignKey("Products")
                .Table;

            assoc.PrimaryKey.AddColumn(assoc.FindColumn("ProductId"));

            DatabaseSchemaFixer.UpdateDataTypes(schema);
            //make sure .Net names are assigned
            PrepareSchemaNames.Prepare(schema, new Namer());

            return(schema);
        }
        public void TestCompositeKeys()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);

            schema.AddTable("Store")
            .AddColumn <int>("Store_Id").AddPrimaryKey("Store_PK")
            .AddColumn <string>("Name").AddLength(10)

            .AddTable("StoreSale")
            .AddColumn <int>("Store_Id").AddForeignKey("Store_FK", "Store")
            .AddColumn <int>("StoreSale_Id")

            .AddTable("StoreSaleDetail")
            .AddColumn <int>("Store_Id").AddForeignKey("Store_FK", "Store")
            .AddColumn <int>("StoreSale_Id")
            .AddColumn <int>("StoreSaleDetail_Id")
            ;
            var store           = schema.FindTableByName("Store");
            var storeSale       = schema.FindTableByName("StoreSale");
            var storeSaleDetail = schema.FindTableByName("StoreSaleDetail");
            var pk1             = new DatabaseConstraint {
                ConstraintType = ConstraintType.PrimaryKey
            };

            pk1.Columns.Add("Store_Id");
            pk1.Columns.Add("StoreSale_Id");
            storeSale.AddConstraint(pk1);

            var pk2 = new DatabaseConstraint {
                ConstraintType = ConstraintType.PrimaryKey
            };

            pk2.Columns.Add("Store_Id");
            pk2.Columns.Add("StoreSale_Id");
            pk2.Columns.Add("StoreSaleDetail_Id");
            storeSaleDetail.AddConstraint(pk2);

            var fk = new DatabaseConstraint {
                ConstraintType = ConstraintType.ForeignKey, RefersToTable = "StoreSale"
            };

            fk.Columns.Add("Store_Id");
            fk.Columns.Add("StoreSale_Id");
            storeSaleDetail.AddConstraint(fk);

            //act
            DatabaseSchemaFixer.UpdateReferences(schema);

            //assert
            Assert.AreEqual(2, store.ForeignKeyChildren.Count, "Store is target of foreign keys from StoreSale and StoreSaleDetail");
            Assert.AreEqual(1, storeSale.ForeignKeyChildren.Count, "StoreSale is target of foreign key from StoreSaleDetail");

            var storeId = storeSaleDetail.FindColumn("Store_Id");

            Assert.AreEqual(2, storeId.ForeignKeyTableNames.Count, "StoreSaleDetail.StoreId is fk to both Store and StoreSale");
            var storeSaleId = storeSaleDetail.FindColumn("StoreSale_Id");

            Assert.AreEqual(1, storeSaleId.ForeignKeyTableNames.Count, "StoreSaleDetail.StoreSale_Id is fk to StoreSale");
        }
Exemple #8
0
        public void TestCompositeKey()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);

            var orderDetail = schema.AddTable("OrderDetails")
                              .AddColumn("OrderID", DbType.Int32).AddPrimaryKey()
                              .AddColumn("ProductID", DbType.Int32)
                              .AddColumn <int>("UnitPrice")
                              .Table;

            orderDetail.PrimaryKey.AddColumn(orderDetail.FindColumn("ProductID"));

            DatabaseSchemaFixer.UpdateReferences(schema);

            var settings = new CodeWriterSettings {
                Namespace = "MyTest", CodeTarget = CodeTarget.PocoNHibernateHbm
            };

            PrepareSchemaNames.Prepare(schema, settings.Namer);

            //act
            var target = new MappingWriter(orderDetail, settings);
            var txt    = target.Write();

            //assert
            var errors = Validate(txt);

            Assert.IsFalse(errors);
        }
Exemple #9
0
        public void TestNaturalKey()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);

            var diagrams = schema.AddTable("Diagrams")
                           .AddColumn("diagram_id", DbType.Int32).AddPrimaryKey()
                           .AddColumn <string>("name").AddLength(10).AddUniqueKey()
                           .AddColumn <int>("principal_id")
                           .Table;

            diagrams.UniqueKeys.Single().AddColumn(diagrams.FindColumn("principal_id"));

            DatabaseSchemaFixer.UpdateReferences(schema);

            var settings = new CodeWriterSettings {
                Namespace = "MyTest", CodeTarget = CodeTarget.PocoNHibernateHbm
            };

            PrepareSchemaNames.Prepare(schema, settings.Namer);

            //act
            var target = new MappingWriter(diagrams, settings);
            var txt    = target.Write();

            //assert
            var errors = Validate(txt);

            Assert.IsFalse(errors);
        }
        /// <summary>
        /// Gets the table. If <see cref="Owner" /> is specified, it is used.
        /// </summary>
        /// <param name="tableName">Name of the table. Oracle names can be case sensitive.</param>
        /// <param name="ct">The ct.</param>
        public DatabaseTable Table(string tableName, CancellationToken ct)
        {
            if (string.IsNullOrEmpty(tableName))
            {
                throw new ArgumentNullException("tableName");
            }

            var loader  = new TableLoader(_schemaReader, DatabaseSchema);
            var handler = ReaderProgress;

            if (handler != null)
            {
                loader.ReaderProgress += RaiseReadingProgress;
            }
            var table = loader.Load(tableName, ct);

            if (ct.IsCancellationRequested)
            {
                return(table);
            }

            if (DatabaseSchema.DataTypes.Count > 0)
            {
                DatabaseSchemaFixer.UpdateDataTypes(DatabaseSchema);
            }
            _schemaReader.PostProcessing(DatabaseSchema);

            return(table);
        }
Exemple #11
0
        public void TestSimpleMapping()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);

            schema.AddTable("Categories")
            .AddColumn("CategoryId", DbType.Int32).AddPrimaryKey()
            .AddColumn("CategoryName", DbType.String);

            var products = schema.AddTable("Products")
                           .AddColumn("ProductId", DbType.Int32).AddPrimaryKey()
                           .AddColumn("ProductName", DbType.String)
                           .AddColumn("CategoryId", DbType.Int32).AddForeignKey("fk", "Categories")
                           .Table;

            DatabaseSchemaFixer.UpdateReferences(schema);

            var settings = new CodeWriterSettings {
                Namespace = "MyTest", CodeTarget = CodeTarget.PocoNHibernateHbm
            };

            PrepareSchemaNames.Prepare(schema, settings.Namer);

            //act
            var target = new MappingWriter(products, settings);
            var txt    = target.Write();

            //assert
            var errors = Validate(txt);

            Assert.IsFalse(errors);
        }
        public void WriteTest()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);
            var table  = schema.AddTable("Categories")
                         .AddColumn("CategoryId", "INT").AddPrimaryKey().AddIdentity()
                         .AddColumn("CategoryName", "NVARCHAR").Table;

            //we need datatypes
            schema.DataTypes.Add(new DataType("INT", "System.Int32"));
            schema.DataTypes.Add(new DataType("NVARCHAR", "System.String"));
            DatabaseSchemaFixer.UpdateDataTypes(schema);
            //make sure .Net names are assigned
            PrepareSchemaNames.Prepare(schema, new Namer());

            //inject the custom code inserter
            var codeWriterSettings = new CodeWriterSettings {
                CodeInserter = new CustomCodeInserter()
            };
            var cw = new ClassWriter(table, codeWriterSettings);

            //act
            var txt = cw.Write();

            //assert
            Assert.IsTrue(txt.Contains("using System.ComponentModel.DataAnnotations.Schema"));
            Assert.IsTrue(txt.Contains("[Table(\"Categories\")]"));
            Assert.IsTrue(txt.Contains("[Column(\"CategoryId\")]"));
        }
        /// <summary>
        /// Gets all tables (plus constraints, indexes and triggers).
        /// </summary>
        public IList <DatabaseTable> AllTables(CancellationToken ct)
        {
            var loader  = new AllTablesLoader(_schemaReader, Exclusions);
            var handler = ReaderProgress;

            if (handler != null)
            {
                loader.ReaderProgress += RaiseReadingProgress;
            }
            var tables = loader.Load(ct);

            if (ct.IsCancellationRequested)
            {
                return(tables);
            }

            DatabaseSchema.Tables.Clear();
            DatabaseSchema.Tables.AddRange(tables);
            UpdateReferences();

            if (DatabaseSchema.DataTypes.Count > 0)
            {
                DatabaseSchemaFixer.UpdateDataTypes(DatabaseSchema);
            }

            _schemaReader.PostProcessing(DatabaseSchema);

            return(tables);
        }
        public void HasMaxLengthTest()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);
            var table  = schema.AddTable("Products")
                         .AddColumn("ProductId", DbType.Int32).AddPrimaryKey().AddIdentity()
                         .AddColumn("ProductName", DbType.String).AddLength(20)
                         .Table;

            //we need datatypes
            schema.DataTypes.Add(new DataType("INT", "System.Int32"));
            schema.DataTypes.Add(new DataType("NVARCHAR", "System.String"));
            //make sure it's all tied up
            DatabaseSchemaFixer.UpdateReferences(schema);

            var target = new CodeFirstMappingWriter(table, new CodeWriterSettings(), new MappingNamer());

            //act
            var result = target.Write();

            //assert
            var hasMaxLength = result.Contains("Property(x => x.ProductName).HasMaxLength(20)");

            Assert.IsTrue(hasMaxLength);
        }
        public void MappingSharedPrimaryKeyTest()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);

            schema
            .AddTable("vehicle")
            .AddColumn <string>("regnum").AddPrimaryKey().AddLength(25)
            .AddColumn <string>("model").AddLength(32)
            .AddTable("car")
            .AddColumn <string>("regnum").AddLength(25).AddPrimaryKey().AddForeignKey("fk", "vehicle")
            .AddColumn <int>("doors");
            //make sure it's all tied up
            DatabaseSchemaFixer.UpdateReferences(schema);
            //make sure .Net names are assigned
            PrepareSchemaNames.Prepare(schema, new Namer());
            var table = schema.FindTableByName("car");

            var mappingNamer       = new MappingNamer();
            var codeWriterSettings = new CodeWriterSettings {
                CodeTarget = CodeTarget.PocoEntityCodeFirst
            };
            var target = new CodeFirstMappingWriter(table, codeWriterSettings, mappingNamer);

            //act
            var txt = target.Write();

            //assert
            var hasScalarKey  = txt.Contains("HasKey(x => x.Regnum);");
            var hasForeignKey = txt.Contains("HasRequired(x => x.Vehicle);");

            Assert.IsTrue(hasScalarKey);
            Assert.IsTrue(hasForeignKey);
        }
        public void MappingNameWithConflictsTest()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);
            var table  = schema.AddTable("Products")
                         .AddColumn("ProductId", DbType.Int32).AddPrimaryKey().AddIdentity()
                         .Table;

            table.NetName = "Product";
            //we need datatypes
            schema.DataTypes.Add(new DataType("INT", "System.Int32"));
            //make sure it's all tied up
            DatabaseSchemaFixer.UpdateReferences(schema);


            var mappingNamer = new MappingNamer();
            var target       = new CodeFirstMappingWriter(table, new CodeWriterSettings(), mappingNamer);

            //we also have a table called "ProductMapping"
            //so we can't call the mapping class for "Product" the same name
            mappingNamer.EntityNames.Add("ProductMapping");
            mappingNamer.EntityNames.Add("ProductMappingMap");

            //act
            target.Write();
            //now the name is assigned
            var className = target.MappingClassName;

            //assert
            Assert.AreEqual("ProductMappingMapMap", className, "Should not conflict with the existing names");
            Assert.AreEqual(3, mappingNamer.EntityNames.Count, "Should add the name to the list");
        }
        /// <summary>
        /// Gets all views.
        /// </summary>
        public IList <DatabaseView> AllViews(CancellationToken ct)
        {
            if (ct.IsCancellationRequested)
            {
                return(DatabaseSchema.Views);
            }

            IList <DatabaseView> views;

            using (_readerAdapter.CreateConnection())
            {
                var builder = new ViewBuilder(_readerAdapter, Exclusions);
                var handler = ReaderProgress;
                if (handler != null)
                {
                    builder.ReaderProgress += RaiseReadingProgress;
                }
                views = builder.Execute(ct);
            }

            DatabaseSchema.Views.Clear();
            DatabaseSchema.Views.AddRange(views);

            UpdateReferences();
            if (DatabaseSchema.DataTypes.Count > 0)
            {
                DatabaseSchemaFixer.UpdateDataTypes(DatabaseSchema);
            }

            return(views);
        }
Exemple #18
0
        public void WriteTest()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);
            var table  = schema.AddTable("Categories")
                         .AddColumn("CategoryId", "INT").AddPrimaryKey().AddIdentity()
                         .AddColumn("CategoryName", "NVARCHAR").Table;

            //we need datatypes
            schema.DataTypes.Add(new DataType("INT", "System.Int32"));
            schema.DataTypes.Add(new DataType("NVARCHAR", "System.String"));
            DatabaseSchemaFixer.UpdateDataTypes(schema);
            //make sure .Net names are assigned
            PrepareSchemaNames.Prepare(schema);

            var cw = new ClassWriter(table, new CodeWriterSettings());

            //act
            var txt = cw.Write();

            //assert
            var hasName         = txt.Contains("public class Category");
            var hasCategoryId   = txt.Contains("public virtual int CategoryId { get; set; }");
            var hasCategoryName = txt.Contains("public virtual string CategoryName { get; set; }");

            Assert.IsTrue(hasName);
            Assert.IsTrue(hasCategoryId);
            Assert.IsTrue(hasCategoryName);
        }
        private static DatabaseSchema PrepareModel()
        {
            var schema = new DatabaseSchema(null, null);

            schema.AddTable("Categories")
            .AddColumn("CategoryId", DbType.Int32).AddPrimaryKey()
            .AddColumn("CategoryName", DbType.String);

            schema.AddTable("Suppliers")
            .AddColumn("SupplierId", DbType.Int32).AddPrimaryKey()
            .AddColumn("SupplierName", DbType.String);

            schema.AddTable("Products")
            .AddColumn("ProductId", DbType.Int32).AddPrimaryKey().AddIdentity()
            .AddColumn("ProductName", DbType.String)
            .AddColumn("SupplierKey", DbType.Int32).AddForeignKey("fk", "Suppliers");

            schema.AddTable("CategoryProducts")
            .AddColumn("CategoryId", DbType.Int32).AddPrimaryKey()
            .AddForeignKey("fk", "Categories")
            .AddColumn("ProductId", DbType.Int32).AddPrimaryKey()
            .AddForeignKey("fk", "Products");

            DatabaseSchemaFixer.UpdateReferences(schema);
            PrepareSchemaNames.Prepare(schema, new Namer());

            return(schema);
        }
        /// <summary>
        /// Gets all datatypes (and updates columns/arguments if already loaded)
        /// </summary>
        public IList <DataType> DataTypes()
        {
            var list = _readerAdapter.DataTypes();

            DatabaseSchema.DataTypes.Clear();
            DatabaseSchema.DataTypes.AddRange(list);
            DatabaseSchemaFixer.UpdateDataTypes(DatabaseSchema); //if columns/arguments loaded later, run this method again.
            return(list);
        }
        private void UpdateReferences()
        {
            //a simple latch so ReadAll will only call this at the end
            if (!_fixUp)
            {
                return;
            }

            DatabaseSchemaFixer.UpdateReferences(DatabaseSchema); //updates all references
        }
Exemple #22
0
        private void UpdateReferences()
        {
            //a simple latch so ReadAll will only call this at the end
            if (!_fixUp)
            {
                return;
            }

            DatabaseSchemaFixer.UpdateReferences(DatabaseSchema); //updates all references

            //last, do custom post processing if implemented
            _sr.PostProcessing(DatabaseSchema);
        }
Exemple #23
0
        /// <summary>
        /// Gets all datatypes (and updates columns/arguments if already loaded)
        /// </summary>
        public IList <DataType> DataTypes()
        {
            List <DataType> list = SchemaConverter.DataTypes(_sr.DataTypes());

            if (list.Count == 0)
            {
                list = _sr.SchemaDataTypes();
            }
            DatabaseSchema.DataTypes.Clear();
            DatabaseSchema.DataTypes.AddRange(list);
            DatabaseSchemaFixer.UpdateDataTypes(DatabaseSchema); //if columns/arguments loaded later, run this method again.
            return(list);
        }
        public void TestSqlServerTimeStampWithTimeZone()
        {
            //arrange
            _column.DbDataType = "TIMESTAMP(6) WITH TIME ZONE";
            _column.Precision  = 6;
            //automatically assign oracle datatypes
            var types = new DataTypeList().Execute();

            DatabaseSchemaFixer.UpdateDataTypes(types, new List <DatabaseColumn>(new [] { _column }));

            //act
            var result = _typeWriter.WriteDataType(_column);

            //assert
            Assert.AreEqual("TIMESTAMP (6) WITH TIME ZONE", result);
        }
        private static DatabaseTable Arrange()
        {
            var schema = new DatabaseSchema(null, SqlType.SqlServer);

            schema.DataTypes.Add(new DataType("NUMBER", "System.Int32"));
            schema.DataTypes.Add(new DataType("VARCHAR2", "System.String"));

            var bu = schema.AddTable("BUSINESS_UNITS")
                     .AddColumn("BUSINESS_UNIT_ID", "NUMBER").AddPrimaryKey().AddIdentity()
                     .AddColumn("DESCRIPTION", "VARCHAR2")
                     .Table;
            var dept = schema.AddTable("DEPARTMENTS")
                       .AddColumn("BUSINESS_UNIT_ID", "NUMBER")
                       .AddColumn("DEPARTMENT_ID", "VARCHAR2").AddLength(4)
                       .AddColumn("GROUP_ID", "NUMBER")
                       .Table;
            var businessUnitFk = new DatabaseConstraint
            {
                ConstraintType = ConstraintType.ForeignKey,
                RefersToTable  = bu.Name
            };

            businessUnitFk.Columns.Add("BUSINESS_UNIT_ID");
            dept.AddConstraint(businessUnitFk);
            //This one IS NOT in the model, so there are broken fk links
            var groupFk = new DatabaseConstraint
            {
                ConstraintType = ConstraintType.ForeignKey,
                RefersToTable  = "GROUPS"
            };

            groupFk.Columns.Add("BUSINESS_UNIT_ID");
            groupFk.Columns.Add("DEPARTMENT_ID");
            groupFk.Columns.Add("GROUP_ID");
            dept.AddConstraint(groupFk);
            var pk = new DatabaseConstraint {
                ConstraintType = ConstraintType.PrimaryKey
            };

            pk.Columns.Add("BUSINESS_UNIT_ID");
            pk.Columns.Add("DEPARTMENT_ID");
            dept.AddConstraint(pk);

            DatabaseSchemaFixer.UpdateDataTypes(schema);

            return(dept);
        }
        //One to one relationships are used for two main reasons:
        // * Divide a large table into smaller parts (Product - ProductDetail)
        // * Divide a table for security (or because it's updated frequently...) (User, UserPassword)


        private static DatabaseSchema Arrange()
        {
            var schema = new DatabaseSchema(null, null);

            schema.AddTable("Products")
            .AddColumn <int>("Id").AddPrimaryKey()
            .AddColumn <string>("Name")

            .AddTable("ProductDetails")
            .AddColumn <int>("Id").AddPrimaryKey().AddForeignKey("Products")
            .AddColumn <string>("Description");

            DatabaseSchemaFixer.UpdateDataTypes(schema);
            //make sure .Net names are assigned
            PrepareSchemaNames.Prepare(schema, new Namer());

            return(schema);
        }
Exemple #27
0
        public void TestRiaServices()
        {
            //arrange
            var schema = new DatabaseSchema(null, null);

            schema.AddTable("Categories")
            .AddColumn("CategoryId", DbType.Int32).AddPrimaryKey()
            .AddColumn("CategoryName", DbType.String);

            schema.AddTable("Products")
            .AddColumn("ProductId", DbType.Int32).AddPrimaryKey()
            .AddColumn("ProductName", DbType.String)
            .AddColumn("CategoryId", DbType.Int32).AddForeignKey("fk", "Categories");

            DatabaseSchemaFixer.UpdateReferences(schema);

            var          directory  = TestHelper.CreateDirectory("TestRiaServices");
            const string @namespace = "MyTest";
            var          settings   = new CodeWriterSettings {
                Namespace = @namespace, CodeTarget = CodeTarget.PocoRiaServices
            };

            //act
            var target = new CodeWriter(schema, settings);

            target.Execute(directory);

            //assert
            var files    = directory.GetFiles("*.cs");
            var products = files.FirstOrDefault(f => f.Name == "Product.cs");

            Assert.IsNotNull(products, "Should have written Product class to represent [Products] table");

            var category = files.FirstOrDefault(f => f.Name == "Category.cs");

            Assert.IsNotNull(category, "Should have written Category class to represent [Categories] table");

            var cs = File.ReadAllText(category.FullName);

            var ok = cs.Contains("[MetadataType(typeof(Category.CategoryMetadata))]");

            Assert.IsTrue(ok, "Should contain nested metadata class");
        }
        /// <summary>
        /// Gets all stored procedures (and functions) with their arguments
        /// </summary>
        public IList <DatabaseStoredProcedure> AllStoredProcedures(CancellationToken ct)
        {
            using (_readerAdapter.CreateConnection())
            {
                var builder = new ProcedureBuilder(_readerAdapter, DatabaseSchema, Exclusions);
                var handler = ReaderProgress;
                if (handler != null)
                {
                    builder.ReaderProgress += RaiseReadingProgress;
                }
                builder.Execute(ct);
            }

            UpdateReferences();
            if (DatabaseSchema.DataTypes.Count > 0)
            {
                DatabaseSchemaFixer.UpdateDataTypes(DatabaseSchema);
            }

            return(DatabaseSchema.StoredProcedures);
        }
        private static DatabaseSchema ArrangeSchema()
        {
            var schema = new DatabaseSchema(null, null);

            schema
            .AddTable("Address")
            .AddColumn <int>("Address_Id").AddPrimaryKey().AddIdentity()
            .AddColumn <string>("Street")
            .AddColumn <string>("City")
            .AddTable("Orders")
            .AddColumn <int>("Order_Id").AddPrimaryKey().AddIdentity()
            .AddColumn <string>("Name")
            .AddColumn <int>("BillingAddress").AddForeignKey("fk_Orders_Address_Billing", "Address")
            .AddColumn <int>("DeliveryAddress").AddForeignKey("fk_Orders_Address_Delivery", "Address")
            ;
            //make sure it's all tied up
            DatabaseSchemaFixer.UpdateReferences(schema);
            //make sure .Net names are assigned
            PrepareSchemaNames.Prepare(schema, new Namer());
            return(schema);
        }
Exemple #30
0
        private static DatabaseSchema ArrangeSchema()
        {
            var schema = new DatabaseSchema(null, null);

            schema
            .AddTable("Categories")
            .AddColumn("CategoryId", "INT").AddPrimaryKey().AddIdentity()
            .AddColumn("CategoryName", "NVARCHAR")
            .AddTable("Products")
            .AddColumn("ProductId", "INT").AddPrimaryKey()
            .AddColumn("ProductName", "NVARCHAR")
            .AddColumn("CategoryId", "INT").AddForeignKey("fk", "Categories");
            //we need datatypes
            schema.DataTypes.Add(new DataType("INT", "System.Int32"));
            schema.DataTypes.Add(new DataType("NVARCHAR", "System.String"));
            //make sure it's all tied up
            DatabaseSchemaFixer.UpdateReferences(schema);
            //make sure .Net names are assigned
            PrepareSchemaNames.Prepare(schema);
            return(schema);
        }