[TestMethod] public void ConstructWithName() { // Arrange var name = new FKName("FKEY"); var reference = referenceTable_; var fields = fields_; var onDelete = OnDelete.SetDefault; var onUpdate = OnUpdate.Cascade; // Act var fkey = new ForeignKey(name, reference, fields, onDelete, onUpdate); // Assert fkey.Name.Should().HaveValue(name); fkey.ReferencedTable.Should().BeSameAs(reference); fkey.ReferencingFields.Should().BeEquivalentTo(fields); fkey.OnDelete.Should().Be(onDelete); fkey.OnUpdate.Should().Be(onUpdate); }
[TestMethod] public void GenerateDeclarationWithName() { // Arrange var name = new FKName("FKEY"); var reference = referenceTable_; var fields = fields_; var onDelete = OnDelete.SetDefault; var onUpdate = OnUpdate.Cascade; var fkey = new ForeignKey(name, reference, fields, onDelete, onUpdate); var mockBuilder = new Mock <IForeignKeyDeclBuilder>(); // Act fkey.GenerateDeclaration(mockBuilder.Object); // Assert mockBuilder.Verify(builder => builder.SetName(name)); mockBuilder.Verify(builder => builder.SetOnDeleteBehavior(onDelete)); mockBuilder.Verify(builder => builder.SetOnUpdateBehavior(onUpdate)); mockBuilder.Verify(builder => builder.SetReferencedTable(reference)); mockBuilder.Verify(builder => builder.SetFields(Arg.IsSameSequence <IEnumerable <IField> >(fields))); mockBuilder.Verify(builder => builder.Build()); mockBuilder.VerifyNoOtherCalls(); }
internal static void RegisterHelpers() { Handlebars.RegisterHelper("POCOModelPropertyAttributes", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('POCOModelPropertyAttributes')"; try { var prefix = parameters.AsString(0); var property = (IProperty)context.Value; var entity = property.Parent; var database = entity.Parent; var entityName = entity.Name; if (entityName.Contains("Gender")) { entityName += " "; entityName = entityName.Trim(); } var decimalAttribute = ""; var keyAttribute = ""; var fkAttributes = ""; var identityAttribute = ""; var columnAttribute = ""; if ((property.Name.Equals(entity.Alias)) || (property.Parent.Relationships.FindItems(RelationSearchField.ToColumnName, property.Name).Count >= 1)) { columnAttribute = string.Format("[Column(\"{0}\")]", property.Name); } /*else if (property.Name.Equals(entity.Alias)) //if the propery is the same as the object name, then we might need to have a column specifier incase we have to rename it * { * columnAttribute = string.Format("[Column(\"{0}\")]", property.Name); * }*/ if (property.Type == "decimal") { decimalAttribute = "[DecimalPrecision(" + property.Precision + ", " + property.Scale + ")]"; } if ((!property.IsIdentity) && (entity.Type == "TABLE")) { identityAttribute = ", DatabaseGenerated(DatabaseGeneratedOption.None)"; } if (property.IsKey) { if (entity.PrimaryKeys.Count > 1) { keyAttribute = string.Format(@"[Key, Column(""{0}"", Order={1}){2}]", property.Name, property.KeyOrder, identityAttribute); columnAttribute = ""; //Clear the column attribute since we have already added it here } else { keyAttribute = "[Key" + identityAttribute + "]"; } List <string> PreviousOneToOneFields = new List <string>(); var RelationshipsOneToOne = entity.Relationships.Fetch(RelationshipMultiplicityType.ZeroOrOneToOne).FindItems(RelationSearchField.FromFieldName, property.Name); var groupedByFKName = RelationshipsOneToOne.GroupByFKName(); foreach (var FKName in groupedByFKName.Keys) { string FieldName = ""; var relationshipList = groupedByFKName[FKName]; var relGroupSummary = relationshipList.AsSummary(); var toGroupRelationshipList = entity.Parent[relGroupSummary.ToTableName].Relationships.GroupByFKName(); var CountOfThisEntityInTargetRelationships = toGroupRelationshipList.CountItems(RelationSearchField.ToTableName, relGroupSummary.FromTableName); int SameTableCount = groupedByFKName.CountItems(RelationSearchField.ToTableName, relGroupSummary.ToTableName); //Need to resolve the to table name to what the alias table name is string ToTableName = entity.Parent.Entities[relGroupSummary.ToTableName].Alias; string ToTableNameSingular = ToTableName.ToSingular(); FieldName = ((PreviousOneToOneFields.Contains(ToTableNameSingular) || (entity.Properties.ContainsKey(ToTableNameSingular)) || (entityName == relGroupSummary.ToTableName) || (SameTableCount > 1) || (CountOfThisEntityInTargetRelationships > 1)) ? string.Join(",", relGroupSummary.FromColumnName) : ToTableNameSingular); //One to one relationships will always point to a virtual item of that class it is related to, so it needs to have the InverseFKTargetNameCollisionSuffix as the // virtual target item will fkAttributes += "[ForeignKey(\"" + FieldName.Replace(" ", "") + Internal.AppSettings.Instance.Configuration.Database.InverseFKTargetNameCollisionSuffix + "\")]"; PreviousOneToOneFields.Add(relGroupSummary.ToTableName); if (fkAttributes.Length > 0) { break; } ; } } if (keyAttribute.Length > 0) { writer.WriteSafeString(prefix + keyAttribute + "\n"); } if (fkAttributes.Length > 0) { writer.WriteSafeString(prefix + fkAttributes + "\n"); } if ((property.Name == "SysStartTime") || (property.Name == "SysEndTime") || (Internal.AppSettings.Instance.Configuration.IsComputedColumn(property)) || (property.IsComputed()) ) { writer.WriteSafeString(prefix + "[DatabaseGenerated(DatabaseGeneratedOption.Computed)]\n"); } if (decimalAttribute.Length > 0) { writer.WriteSafeString(prefix + decimalAttribute + "\n"); } if (columnAttribute.Length > 0) { writer.WriteSafeString(prefix + columnAttribute + "\n"); } writer.WriteSafeString(prefix); //Write the space header to make sure there is always space } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("PropertyAsObjectName", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('PropertyAsObjectName')"; try { var prefix = parameters.AsString(0); if (((Object)context.Value).GetType().Name == "Property") { writer.WriteSafeString(((IProperty)context.Value).AsObjectPropertyName()); } else { throw new Exception(string.Format("Context cannot be of type {0}.", ((Object)context.Value).GetType().Name)); } } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString(string.Format("{0}: **** ERROR RENDERING **** {1}", PROC_NAME, ex.Message)); } }); Handlebars.RegisterHelper("POCOModelFKConstructorInit", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('POCOModelFKConstructorInit')"; try { var prefix = parameters.AsString(0); var entity = (IEntity)context.Value; if (entity.Name.Contains("Relationship")) { entity.Name += ""; } var PreviousOneToManyFields = new List <string>(); var relZeroOrOneToMany = entity.Relationships.Fetch(RelationshipMultiplicityType.ZeroOrOneToMany); var groupedByFKName = relZeroOrOneToMany.GroupByFKName(); foreach (var FKName in groupedByFKName.Keys) { if (FKName.Contains("FK_tbl_Tax_tbl_Parcel") || (FKName.Contains("FK_tbl_Tax_tbl_Parcel"))) { entity.Name += ""; } var relationshipList = groupedByFKName[FKName]; var relGroupSummary = relationshipList.AsSummary(); string ToTableName = entity.Parent.Entities[relGroupSummary.ToTableName].Alias; string ToObjectFieldName = relGroupSummary.AsObjectPropertyName(); writer.WriteSafeString(string.Format( "\n{0}this.{1} = new HashSet<{2}>(); //{3} 0|1->*" , prefix, ToObjectFieldName.ToPlural(), ToTableName, relGroupSummary.Name)); PreviousOneToManyFields.Add(relGroupSummary.ToTableName); } } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("POCOModelFKProperties", (writer, context, parameters) => { var entity = (IEntity)context.Value; var PROC_NAME = string.Format("Handlebars.RegisterHelper('POCOModelFKProperties', Entity='{0}')", entity.Name); try { var prefix = parameters.AsString(0); List <string> PreviousOneToManyFields = new List <string>(); PreviousOneToManyFields.Clear(); var RelationshipsOneToMany = entity.Relationships.Fetch(RelationshipMultiplicityType.ZeroOrOneToMany); var groupedByFKName = RelationshipsOneToMany.GroupByFKName(); foreach (var FKName in groupedByFKName.Keys) { if (FKName.Contains("FKNAMEHERE")) { entity.Name += ""; } var relationshipList = groupedByFKName[FKName]; var relGroupSummary = relationshipList.AsSummary(); string ToTableName = entity.Parent.Entities[relGroupSummary.ToTableName].Alias; string ToObjectFieldName = relGroupSummary.AsObjectPropertyName(); //Check and see we have multiple declarations of thre same table, if we do, we will need an inverse // property annotation figure out how to property find the correct object property target var inversePropertyAttribute = ""; if (groupedByFKName.CountItems(relGroupSummary.ToTableName) > 1) { var toGroupRelationshipList = entity.Parent[relGroupSummary.ToTableName].Relationships.GroupByFKName(); if (!toGroupRelationshipList.ContainsKey(FKName)) { throw new Exception(string.Format("The inverse of FK {0} ({1}->{2})", FKName, relGroupSummary.FromTableName, relGroupSummary.ToTableName)); } var inverseOfThisFK = toGroupRelationshipList[FKName]; var relGroupSummaryInverse = inverseOfThisFK.AsSummary(); var InversePropertyNamePotential = relGroupSummaryInverse.EndAsObjectPropertyName(); if (InversePropertyNamePotential.Length > 0) { inversePropertyAttribute = string.Format("[InverseProperty(\"{0}\")]", InversePropertyNamePotential); } } writer.WriteSafeString(string.Format("\n\n{0}//<summary>{1} {2}</summary>", prefix, relGroupSummary.Name, relGroupSummary.MultiplicityType.AsString())); writer.WriteSafeString(string.Format("\n{0}[System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Usage\", \"CA2227: CollectionPropertiesShouldBeReadOnly\")]", prefix)); if (inversePropertyAttribute.Length > 0) { writer.WriteSafeString(string.Format("\n{0}{1}", prefix, inversePropertyAttribute)); } writer.WriteSafeString(string.Format("\n{0}public virtual ICollection<{1}> {2} {{ get; set; }}", prefix, ToTableName, ToObjectFieldName.ToPlural())); PreviousOneToManyFields.Add(relGroupSummary.ToTableName); } } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("RelationshipGroupAsSummaryField", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('RelationshipGroupAsSummaryField')"; try { var fieldName = parameters.AsString(0); var stringModInstructions = parameters.AsString(1); var contextObject = (Object)context.Value; IRelationshipList relationshipList = null; IDatabase database = null; if (contextObject.GetType().Name == "RelationshipList") { relationshipList = ((IRelationshipList)context.Value); database = relationshipList.FirstOrDefault().Parent.Parent; } else { throw new Exception(string.Format("Helper cannot process context type of '{0}'", contextObject.GetType().Name)); } var summary = relationshipList.AsSummary(); var output = ""; if (fieldName == "Name") { output = summary.Name; } if (fieldName == "FromColumnName") { output = string.Join("", summary.FromColumnName); } if (fieldName == "FromFieldName") { output = string.Join("", summary.FromFieldName); } if (fieldName == "FromTableName") { output = summary.FromTableName; } if (fieldName == "FromTableAlias") { if (database.ContainsKey(summary.FromTableName)) { output = database[summary.FromTableName].Alias; } } if (fieldName == "ToColumnName") { output = string.Join("", summary.ToColumnName); } if (fieldName == "ToFieldName") { output = string.Join("", summary.ToFieldName); } if (fieldName == "ToTableName") { output = summary.ToTableName; } if (fieldName == "ToUniqueColumnName") { output = summary.ToUniqueColumnName(); } if (fieldName == "MultiplicityType") { output = summary.MultiplicityType.ToString(); } if (fieldName == "Type") { output = summary.Type; } if (fieldName == "Types") { output = string.Join(", ", summary.FromFieldName); } ; if (fieldName == "MultiplicityTypeWarning") { output = (summary.MultiplicityTypeWarning ? "true" : "false"); } if (fieldName == "ToTableAlias") { if (database.ContainsKey(summary.ToTableName)) { output = database[summary.ToTableName].Alias; } } if (output.Length == 0) { throw new Exception(string.Format("Helper cannot process field name of '{0}'", fieldName)); } writer.WriteSafeString(output.StringMod(stringModInstructions)); } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("POCOModelFKManyToZeroToOne", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('POCOModelFKManyToZeroToOne')"; try { var contextObject = (Object)context.Value; IEntity entity = null; if (contextObject.GetType().Name == "Relationship") { entity = ((IRelationship)context.Value).Parent; } else if (contextObject.GetType().Name == "RelationshipList") { entity = ((IRelationshipList)context.Value).FirstOrDefault().Parent; } else if (contextObject.GetType().Name == "Entity") { entity = ((IEntity)context.Value); } var entityName = entity.Name; var prefix = ""; var objectSuffix = ""; var fkNametoSelect = ""; if (parameters.Count() == 1) { if (string.IsNullOrWhiteSpace(parameters.AsString(0))) { prefix = parameters.AsString(0); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(0))) { fkNametoSelect = parameters.AsString(0); } } else if (parameters.Count() == 2) { if (string.IsNullOrWhiteSpace(parameters.AsString(0))) { prefix = parameters.AsString(0); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(0))) { fkNametoSelect = parameters.AsString(0); } if (string.IsNullOrWhiteSpace(parameters.AsString(1))) { prefix = parameters.AsString(1); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(1))) { fkNametoSelect = parameters.AsString(1); } } else if (parameters.Count() == 3) { if (string.IsNullOrWhiteSpace(parameters.AsString(0))) { prefix = parameters.AsString(0); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(0))) { fkNametoSelect = parameters.AsString(0); } if (string.IsNullOrWhiteSpace(parameters.AsString(1))) { prefix = parameters.AsString(1); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(1))) { fkNametoSelect = parameters.AsString(1); } objectSuffix = parameters.AsString(2); } if (entity.Name.Contains("Relationship")) { entity.Name += ""; } List <string> PreviousManyToOneFields = new List <string>(); var RelationshipsManyToOne = entity.Relationships.Fetch(RelationshipMultiplicityType.ManyToZeroOrOne); var groupedByFKName = RelationshipsManyToOne.GroupByFKName(); foreach (var FKName in groupedByFKName.Keys) { var relationshipList = groupedByFKName[FKName]; var relGroupSummary = relationshipList.AsSummary(); string ToTableName = entity.Parent.Entities[relGroupSummary.ToTableName].Alias; int SameTableCount = groupedByFKName.CountItems(RelationSearchField.ToTableName, relGroupSummary.ToTableName); //Need to resolve the to table name to what the alias table name is string ToTableNameSingular = ToTableName.ToSingular(); string FieldName = ((PreviousManyToOneFields.Contains(ToTableNameSingular) || (entity.Properties.ContainsKey(ToTableNameSingular)) || (entityName == relGroupSummary.ToTableName) || (SameTableCount > 1)) ? relGroupSummary.ToUniqueColumnName() : ToTableNameSingular).ToCsObjectName(); var ForeignKeyName = ""; //Pick the key that exists in this entities properties if (entity.Properties.ContainsKey(string.Join(", ", relGroupSummary.ToFieldName))) { ForeignKeyName = string.Join(", ", relGroupSummary.ToFieldName); } if (entity.Properties.ContainsKey(string.Join(", ", relGroupSummary.FromFieldName))) { ForeignKeyName = string.Join(", ", relGroupSummary.FromFieldName); } PreviousManyToOneFields.Add(relGroupSummary.ToTableName); if (fkNametoSelect.Length == 0) { writer.WriteSafeString(string.Format("\n{0}/// <summary>{1} *->0|1</summary>", prefix, relGroupSummary.Name)); if (ForeignKeyName.Length > 0) { writer.WriteSafeString(string.Format("\n{0}[ForeignKey(\"{1}\")]", prefix, ForeignKeyName)); } writer.WriteSafeString(string.Format("\n{0}public virtual {1} {2} {{ get; set; }}", prefix, ToTableNameSingular, FieldName + objectSuffix)); } else { if (fkNametoSelect == FKName) { writer.WriteSafeString(FieldName); } } } } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("POCOModelFKZeroOrOneToOne", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('POCOModelFKZeroOrOneToOne')"; try { var prefix = parameters.AsString(0); var contextObject = (Object)context.Value; IEntity entity = null; if (contextObject.GetType().Name == "Relationship") { entity = ((IRelationship)context.Value).Parent; } else if (contextObject.GetType().Name == "RelationshipList") { entity = ((IRelationshipList)context.Value).FirstOrDefault().Parent; } else if (contextObject.GetType().Name == "Entity") { entity = ((IEntity)context.Value); } var entityName = entity.Name; var fkNametoSelect = ""; if (parameters.Count() == 1) { if (string.IsNullOrWhiteSpace(parameters.AsString(0))) { prefix = parameters.AsString(0); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(0))) { fkNametoSelect = parameters.AsString(0); } } else if (parameters.Count() == 2) { if (string.IsNullOrWhiteSpace(parameters.AsString(0))) { prefix = parameters.AsString(0); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(0))) { fkNametoSelect = parameters.AsString(0); } if (string.IsNullOrWhiteSpace(parameters.AsString(1))) { prefix = parameters.AsString(1); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(1))) { fkNametoSelect = parameters.AsString(1); } } else if (parameters.Count() == 3) { if (string.IsNullOrWhiteSpace(parameters.AsString(0))) { prefix = parameters.AsString(0); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(0))) { fkNametoSelect = parameters.AsString(0); } if (string.IsNullOrWhiteSpace(parameters.AsString(1))) { prefix = parameters.AsString(1); } if (entity.RelationshipGroups.ContainsKey(parameters.AsString(1))) { fkNametoSelect = parameters.AsString(1); } } if (entityName.Contains("Noun")) { entityName += ""; } var PreviousOneToOneFields = new List <string>(); var RelationshipsOneToOne = entity.Relationships.Fetch(RelationshipMultiplicityType.ZeroOrOneToOne); foreach (var relationshipGroupKV in RelationshipsOneToOne.GroupByFKName()) { var relationship = relationshipGroupKV.Value.AsSummary(); var toGroupRelationshipList = entity.Parent[relationship.ToTableName].Relationships.GroupByFKName(); if (!toGroupRelationshipList.ContainsKey(relationshipGroupKV.Key)) { throw new Exception(string.Format("The inverse of FK {0} ({1}->{2})", relationshipGroupKV.Key, relationship.FromTableName, relationship.ToTableName)); } var relationshipInverse = toGroupRelationshipList[relationshipGroupKV.Key].AsSummary(); if (relationship.Name.StartsWith("FK_tbl_Collateral_tbl_OccupancyStatus")) { relationship.Name += ""; } if (fkNametoSelect.Length == 0) { writer.WriteSafeString(string.Format("\n{0}/// <summary>{1} {2}</summary>", prefix, relationship.Name, relationship.MultiplicityType.AsString())); //writer.WriteSafeString(string.Format("\n{0}public virtual {1} {2} {{ get; set; }}", prefix, ToTableName.ToSingular(), (FieldName.Replace(" ", "")))); writer.WriteSafeString(string.Format("\n{0}[ForeignKey(\"{1}\")]", prefix, string.Join(", ", relationship.FromObjectPropertyName))); writer.WriteSafeString(string.Format("\n{0}public virtual {1} {2} {{ get; set; }}", prefix, entity.Parent.Entities[relationship.ToTableName].Alias.ToSingular(), relationship.EndAsObjectPropertyName())); } else { if (fkNametoSelect == relationship.Name) { writer.WriteSafeString(relationship.EndAsObjectPropertyName()); } } } } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("UnitTestsRenderExtendedEndpoints", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('UnitTestsRenderExtendedEndpoints')"; try { var prefix = parameters.AsString(0); var entity = (IEntity)context.Value; foreach (var relationshipGroupKV in entity.RelationshipGroups) { var relationshipGroup = relationshipGroupKV.Value; var relationship = relationshipGroup.AsSummary(); string ExpandColumnName = relationship.EndAsObjectPropertyName(); writer.WriteSafeString(string.Format("\n{0}using (var response = await HttpClient.GetAsync(\"http://testserver/api/{1}?%24expand={2}<t/>&%24top=10\")) ", prefix, entity.Alias, ExpandColumnName)); writer.WriteSafeString(string.Format("\n{0}{{ ", prefix)); writer.WriteSafeString(string.Format("\n{0} var result = await response.Content.ReadAsStringAsync(); ", prefix)); writer.WriteSafeString(string.Format("\n{0} Assert.IsTrue(response.StatusCode == HttpStatusCode.OK, \"Return Get 10 or less {1} with Expand of {2}. \" + result); ", prefix, entity.Name, ExpandColumnName)); writer.WriteSafeString(string.Format("\n{0}}} ", prefix)); } } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("EntityPrimaryKeysAsParmString", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('EntityPrimaryKeysAsParmString')"; try { writer.WriteSafeString(((IEntity)context.Value).PrimaryKeys.AsParmString().Trim()); } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("IsAuditiableOutput", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('EntityBaseClass')"; try { var outputText = parameters.AsString(0); writer.WriteSafeString(((IEntity)context.Value).IsAuditable() ? outputText : ""); } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("EntityPrimaryKeysAsLinqEquation", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('EntityPrimaryKeysAsLinqEquation')"; try { var prefix = parameters.AsString(0); var prefixSetter = ((parameters.Count() > 1) ? parameters.AsString(1) : ""); var entityName = ((IEntity)context.Value).Name; if (entityName.Contains("ZipCode")) { entityName += " "; entityName = entityName.Trim(); } writer.WriteSafeString(((IEntity)context.Value).PrimaryKeys.AsLinqEquationString(prefix, " && ", "==", prefixSetter).Trim()); } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("EntityPrimaryKeysAsODataRouteString", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('EntityPrimaryKeysAsODataRouteString')"; try { writer.WriteSafeString(((IEntity)context.Value).PrimaryKeys.AsODataRouteString().Trim()); } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("EntityPrimaryKeysAsCsvString", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('EntityPrimaryKeysAsCsvString')"; try { var prefix = parameters.AsString(0); var useObjectPropertyName = false; //this will attempt to resolve the property name within context of its own objects if (parameters.Length > 1) { useObjectPropertyName = parameters.AsString(1).StartsWith("O"); } writer.WriteSafeString(((IEntity)context.Value).PrimaryKeys.AsCsvString(prefix, useObjectPropertyName).Trim()); } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("EntityPrimaryKeysAsParmBooleanCheck", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('EntityPrimaryKeysAsParmBooleanCheck')"; try { var prefix = parameters.AsString(0); var Op = parameters.AsString(1); if (Op.Length == 0) { Op = "=="; } writer.WriteSafeString(((IEntity)context.Value).PrimaryKeys.AsParmBooleanCheck(prefix, Op).Trim()); } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); Handlebars.RegisterHelper("PropertyExists", (writer, context, parameters) => { var PROC_NAME = "Handlebars.RegisterHelper('PropertyExists')"; try { var prefix = parameters.AsString(0); var Op = parameters.AsString(1); if (Op.Length == 0) { Op = "=="; } writer.WriteSafeString(((IEntity)context.Value).PrimaryKeys.AsParmBooleanCheck(prefix, Op).Trim()); } catch (Exception ex) { Console.WriteLine(PROC_NAME + "- Error! " + ex.Message); writer.WriteSafeString("**** ERROR RENDERING " + PROC_NAME + ". " + ex.Message); } }); }