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 WriteViewTest() { //arrange var view = new DatabaseView(); view.Name = "AlphabeticNames"; view.AddColumn("FirstName", typeof(string)).AddNullable() .AddColumn("LastName", typeof(string)).AddNullable(); var schema = new DatabaseSchema(null, null); schema.Views.Add(view); PrepareSchemaNames.Prepare(schema); var codeWriterSettings = new CodeWriterSettings { CodeTarget = CodeTarget.PocoNHibernateHbm, IncludeViews = true }; var cw = new ClassWriter(view, codeWriterSettings); //act var txt = cw.Write(); //assert var hasFirstName = txt.Contains("public virtual string FirstName"); var hasLastName = txt.Contains("public virtual string LastName"); var hasEquals = txt.Contains("public override bool Equals(object obj)"); Assert.IsTrue(hasFirstName); Assert.IsTrue(hasLastName); Assert.IsTrue(hasEquals); }
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); }
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 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); }
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); }
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); }
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\")]")); }
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 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); }
//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); }
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); }
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); }
private static DatabaseSchema PrepareModel() { var schema = new DatabaseSchema(null, null); schema.AddTable("Categories") .AddColumn("CategoryId", DbType.Int32).AddPrimaryKey() .AddColumn("CategoryName", DbType.String); var view = new DatabaseView { Name = "AlphabeticCategories" }; schema.Views.Add(view); view .AddColumn("CategoryId", DbType.Int32) .AddColumn("CategoryName", DbType.String); DatabaseSchemaFixer.UpdateReferences(schema); PrepareSchemaNames.Prepare(schema, new Namer()); return(schema); }
private static DatabaseSchema Arrange() { var schema = new DatabaseSchema(null, null); schema.AddTable("Vehicles") .AddColumn <int>("Vehicle_Id").AddPrimaryKey() .AddColumn <string>("ModelName") .AddTable("Cars") .AddColumn <int>("Vehicle_Id").AddPrimaryKey().AddForeignKey("Vehicles") .AddColumn <int>("Seats") .AddTable("Bicycles") .AddColumn <int>("Vehicle_Id").AddPrimaryKey().AddForeignKey("Vehicles") .AddColumn <string>("Gears"); DatabaseSchemaFixer.UpdateDataTypes(schema); //make sure .Net names are assigned PrepareSchemaNames.Prepare(schema, new Namer()); return(schema); }