public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { ReferencePropertyInfo info = (ReferencePropertyInfo)conceptInfo; var referenceGuid = new PropertyInfo { DataStructure = info.DataStructure, Name = info.Name + "ID" }; PropertyHelper.GenerateCodeForType(referenceGuid, codeBuilder, "Guid?"); if (DslUtility.IsQueryable(info.DataStructure) && DslUtility.IsQueryable(info.Referenced)) { DataStructureQueryableCodeGenerator.AddNavigationPropertyWithBackingField(codeBuilder, info.DataStructure, csPropertyName: info.Name, propertyType: "Common.Queryable." + info.Referenced.Module.Name + "_" + info.Referenced.Name, additionalSetterCode: info.Name + "ID = value != null ? (Guid?)value.ID : null;"); } if (info.DataStructure is IOrmDataStructure && info.Referenced is IOrmDataStructure) { codeBuilder.InsertCode( string.Format("modelBuilder.Entity<Common.Queryable.{0}_{1}>().HasOptional(t => t.{2}).WithMany().HasForeignKey(t => t.{2}ID);\r\n ", info.DataStructure.Module.Name, info.DataStructure.Name, info.Name), DomInitializationCodeGenerator.EntityFrameworkOnModelCreatingTag); } else if (info.DataStructure is IOrmDataStructure) { codeBuilder.InsertCode( string.Format("modelBuilder.Entity<Common.Queryable.{0}_{1}>().Ignore(t => t.{2});\r\n ", info.DataStructure.Module.Name, info.DataStructure.Name, info.Name), DomInitializationCodeGenerator.EntityFrameworkOnModelCreatingTag); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (PropertyInfo)conceptInfo; PropertyHelper.GenerateCodeForType(info, codeBuilder, "decimal?"); PropertyHelper.GenerateStorageMapping(info, codeBuilder, "System.Data.SqlDbType.Decimal", precision: 28, scale: 10); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DataStructureInfo)conceptInfo; var orm = info as IOrmDataStructure; if (orm != null) { codeBuilder.InsertCode(SnippetEntityClassMembers(info), DataStructureCodeGenerator.BodyTag, info); DataStructureCodeGenerator.AddInterfaceAndReference(codeBuilder, string.Format("System.IEquatable<{0}>", info.Name), typeof(System.IEquatable <>), info); RepositoryHelper.GenerateRepository(info, codeBuilder); RepositoryHelper.GenerateQueryableRepositoryFunctions(info, codeBuilder, QuerySnippet(info)); codeBuilder.InsertCode(SnippetQueryableFilterById(info), RepositoryHelper.RepositoryMembers, info); PropertyInfo idProperty = new PropertyInfo { DataStructure = info, Name = "ID" }; PropertyHelper.GenerateCodeForType(idProperty, codeBuilder, "Guid"); DataStructureCodeGenerator.AddInterfaceAndReference(codeBuilder, typeof(IEntity), info); codeBuilder.InsertCode( string.Format("public System.Data.Entity.DbSet<Common.Queryable.{0}_{1}> {0}_{1} {{ get; set; }}\r\n ", info.Module.Name, info.Name), DomInitializationCodeGenerator.EntityFrameworkContextMembersTag); codeBuilder.InsertCode( string.Format("modelBuilder.Ignore<global::{0}.{1}>();\r\n " + "modelBuilder.Entity<Common.Queryable.{0}_{1}>().Map(m => {{ m.MapInheritedProperties(); m.ToTable(\"{3}\", \"{2}\"); }});\r\n ", info.Module.Name, info.Name, orm.GetOrmSchema(), orm.GetOrmDatabaseObject()), DomInitializationCodeGenerator.EntityFrameworkOnModelCreatingTag); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { PropertyInfo info = (PropertyInfo)conceptInfo; PropertyHelper.GenerateCodeForType(info, codeBuilder, "byte[]"); PropertyHelper.GenerateStorageMapping(info, codeBuilder, "System.Data.SqlDbType.VarBinary"); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = conceptInfo as PropertyInfo; PropertyHelper.GenerateCodeForType(info, codeBuilder, "decimal?"); PropertyHelper.GenerateStorageCustomMapping(info, codeBuilder, $"PersistenceStorageHelper.GetMoneySqlParameter(entity.{info.Name})"); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { ReferencePropertyInfo info = (ReferencePropertyInfo)conceptInfo; var referenceGuid = new PropertyInfo { DataStructure = info.DataStructure, Name = info.Name + "ID" }; PropertyHelper.GenerateCodeForType(referenceGuid, codeBuilder, "Guid?"); PropertyHelper.GenerateStorageMapping(referenceGuid, codeBuilder, "System.Data.SqlDbType.UniqueIdentifier"); if (DslUtility.IsQueryable(info.DataStructure) && DslUtility.IsQueryable(info.Referenced)) { DataStructureQueryableCodeGenerator.AddNavigationPropertyWithBackingField(codeBuilder, info.DataStructure, csPropertyName: info.Name, propertyType: "Common.Queryable." + info.Referenced.Module.Name + "_" + info.Referenced.Name, additionalSetterCode: info.Name + "ID = value != null ? (Guid?)value.ID : null;"); } if (ReferencePropertyDbConstraintInfo.IsSupported(info) && info.DataStructure is IOrmDataStructure && info.Referenced is IOrmDataStructure) { var ormDataStructure = (IOrmDataStructure)info.DataStructure; var referencedOrmDataStructure = (IOrmDataStructure)info.Referenced; string systemMessage = $"DataStructure:{info.DataStructure.FullName},Property:{info.Name}ID,Referenced:{info.Referenced.FullName}"; if (info.DataStructure is IWritableOrmDataStructure) { string onEnterInterpretSqlError = @"if (interpretedException is Rhetos.UserException && Rhetos.Utilities.MsSqlUtility.IsReferenceErrorOnInsertUpdate(interpretedException, " + CsUtility.QuotedString(referencedOrmDataStructure.GetOrmSchema() + "." + referencedOrmDataStructure.GetOrmDatabaseObject()) + @", " + CsUtility.QuotedString("ID") + @", " + CsUtility.QuotedString(ReferencePropertyConstraintDatabaseDefinition.GetConstraintName(info)) + @")) ((Rhetos.UserException)interpretedException).SystemMessage = " + CsUtility.QuotedString(systemMessage) + @"; "; codeBuilder.InsertCode(onEnterInterpretSqlError, WritableOrmDataStructureCodeGenerator.OnDatabaseErrorTag, info.DataStructure); if (info.Referenced == info.DataStructure) { codeBuilder.InsertCode($@"if (entity.{info.Name}ID != null && entity.{info.Name}ID != entity.ID) yield return entity.{info.Name}ID.Value; ", WritableOrmDataStructureCodeGenerator.PersistenceStorageMapperDependencyResolutionTag, info.DataStructure); } } if (info.Referenced is IWritableOrmDataStructure) { string onDeleteInterpretSqlError = @"if (interpretedException is Rhetos.UserException && Rhetos.Utilities.MsSqlUtility.IsReferenceErrorOnDelete(interpretedException, " + CsUtility.QuotedString(ormDataStructure.GetOrmSchema() + "." + ormDataStructure.GetOrmDatabaseObject()) + @", " + CsUtility.QuotedString(info.GetSimplePropertyName()) + @", " + CsUtility.QuotedString(ReferencePropertyConstraintDatabaseDefinition.GetConstraintName(info)) + @")) ((Rhetos.UserException)interpretedException).SystemMessage = " + CsUtility.QuotedString(systemMessage) + @"; "; codeBuilder.InsertCode(onDeleteInterpretSqlError, WritableOrmDataStructureCodeGenerator.OnDatabaseErrorTag, info.Referenced); } } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { PropertyInfo info = (PropertyInfo)conceptInfo; PropertyHelper.GenerateCodeForType(info, codeBuilder, "string"); if (info.DataStructure is IWritableOrmDataStructure) { codeBuilder.InsertCode(LimitStringLengthOnSaveSnippet(info), WritableOrmDataStructureCodeGenerator.ArgumentValidationTag, info.DataStructure); } // TODO: Implement error handling of the maximum length for filter parameters and any other data (sent from client) that is used in a way other than Save function. }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (DateTimePropertyInfo)conceptInfo; PropertyHelper.GenerateCodeForType(info, codeBuilder, "DateTime?"); if (!_setting.UseLegacyMsSqlDateTime) { PropertyHelper.GenerateStorageMapping(info, codeBuilder, "System.Data.SqlDbType.DateTime2", scale: _setting.DateTimePrecision); } else { PropertyHelper.GenerateStorageMapping(info, codeBuilder, "System.Data.SqlDbType.DateTime"); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (PropertyInfo)conceptInfo; PropertyHelper.GenerateCodeForType(info, codeBuilder, "decimal?"); if (info.DataStructure is IOrmDataStructure) { codeBuilder.InsertCode( string.Format("modelBuilder.Entity<Common.Queryable.{0}_{1}>().Property(t => t.{2}).HasPrecision(28, 10);\r\n ", info.DataStructure.Module.Name, info.DataStructure.Name, info.Name), DomInitializationCodeGenerator.EntityFrameworkOnModelCreatingTag); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { PropertyInfo info = (PropertyInfo)conceptInfo; PropertyHelper.GenerateCodeForType(info, codeBuilder, "string"); PropertyHelper.GenerateStorageMapping(info, codeBuilder, "System.Data.SqlDbType.NVarChar"); // Size is automatically set by SqlProperty, it should not be specified in storage mapping, to avoid automatic truncating longer strings. if (info.DataStructure is IWritableOrmDataStructure) { codeBuilder.InsertCode(LimitStringLengthOnSaveSnippet(info), WritableOrmDataStructureCodeGenerator.ArgumentValidationTag, info.DataStructure); } // TODO: Implement error handling of the maximum length for filter parameters and any other data (sent from client) that is used in a way other than Save function. }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (ComputedInfo)conceptInfo; RepositoryHelper.GenerateRepository(info, codeBuilder); RepositoryHelper.GenerateQueryableRepositoryFunctions(info, codeBuilder, null, LoadFunctionBodySnippet(info)); codeBuilder.InsertCode(RepositoryFunctionsSnippet(info), RepositoryHelper.RepositoryMembers, info); PropertyInfo idProperty = new PropertyInfo { DataStructure = info, Name = "ID" }; PropertyHelper.GenerateCodeForType(idProperty, codeBuilder, "Guid"); DataStructureCodeGenerator.AddInterfaceAndReference(codeBuilder, typeof(IEntity), info); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = (QueryableExtensionInfo)conceptInfo; codeBuilder.InsertCode(CodeSnippet(info), DataStructureCodeGenerator.BodyTag, info); DataStructureCodeGenerator.AddInterfaceAndReference(codeBuilder, string.Format("System.IEquatable<{0}>", info.Name), typeof(IEquatable <>), info); RepositoryHelper.GenerateRepository(info, codeBuilder); RepositoryHelper.GenerateQueryableRepositoryFunctions(info, codeBuilder, QuerySnippet(info)); codeBuilder.InsertCode(RepositoryFunctionsSnippet(info), RepositoryHelper.RepositoryMembers, info); PropertyInfo idProperty = new PropertyInfo { DataStructure = info, Name = "ID" }; PropertyHelper.GenerateCodeForType(idProperty, codeBuilder, "Guid"); DataStructureCodeGenerator.AddInterfaceAndReference(codeBuilder, typeof(IEntity), info); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { var info = conceptInfo as PropertyInfo; PropertyHelper.GenerateCodeForType(info, codeBuilder, "decimal?"); PropertyHelper.GenerateStorageMapping(info, codeBuilder, "System.Data.SqlDbType.Money"); if (info.DataStructure is IWritableOrmDataStructure) { var property = $"item.{info.Name}"; var roundingFactor = Math.Pow(10, 2); codeBuilder.InsertCode( @$ "{property} = {property} != null ? (long)({property}.Value * {roundingFactor}m) / {roundingFactor}m : null; ", MoneyRoundingInfoCodeGenerator.MoneyRoundingPropertiesTag, info.DataStructure); } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { PropertyHelper.GenerateCodeForType((PropertyInfo)conceptInfo, codeBuilder, "decimal?"); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { PropertyHelper.GenerateCodeForType((PropertyInfo)conceptInfo, codeBuilder, "DateTime?"); PropertyHelper.GenerateStorageMapping((PropertyInfo)conceptInfo, codeBuilder, "System.Data.SqlDbType.Date"); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { ReferencePropertyInfo info = (ReferencePropertyInfo)conceptInfo; var referenceGuid = new PropertyInfo { DataStructure = info.DataStructure, Name = info.Name + "ID" }; PropertyHelper.GenerateCodeForType(referenceGuid, codeBuilder, "Guid?"); if (DslUtility.IsQueryable(info.DataStructure) && DslUtility.IsQueryable(info.Referenced)) { DataStructureQueryableCodeGenerator.AddNavigationPropertyWithBackingField(codeBuilder, info.DataStructure, csPropertyName: info.Name, propertyType: "Common.Queryable." + info.Referenced.Module.Name + "_" + info.Referenced.Name, additionalSetterCode: info.Name + "ID = value != null ? (Guid?)value.ID : null;"); } if (info.DataStructure is IOrmDataStructure && info.Referenced is IOrmDataStructure) { codeBuilder.InsertCode( info.OrmMappingSnippet(), DomInitializationCodeGenerator.EntityFrameworkOnModelCreatingTag); } else if (info.DataStructure is IOrmDataStructure) { codeBuilder.InsertCode( string.Format("modelBuilder.Entity<Common.Queryable.{0}_{1}>().Ignore(t => t.{2});\r\n ", info.DataStructure.Module.Name, info.DataStructure.Name, info.Name), DomInitializationCodeGenerator.EntityFrameworkOnModelCreatingTag); } if (ReferencePropertyConstraintDatabaseDefinition.IsSupported(info) && info.DataStructure is IOrmDataStructure && info.Referenced is IOrmDataStructure) { var ormDataStructure = (IOrmDataStructure)info.DataStructure; var referencedOrmDataStructure = (IOrmDataStructure)info.Referenced; string systemMessage = "DataStructure:" + info.DataStructure + ",Property:" + info.Name + "ID,Referenced:" + info.Referenced; if (info.DataStructure is IWritableOrmDataStructure) { string onEnterInterpretSqlError = @"if (interpretedException is Rhetos.UserException && Rhetos.Utilities.MsSqlUtility.IsReferenceErrorOnInsertUpdate(interpretedException, " + CsUtility.QuotedString(referencedOrmDataStructure.GetOrmSchema() + "." + referencedOrmDataStructure.GetOrmDatabaseObject()) + @", " + CsUtility.QuotedString("ID") + @", " + CsUtility.QuotedString(ReferencePropertyConstraintDatabaseDefinition.GetConstraintName(info)) + @")) ((Rhetos.UserException)interpretedException).SystemMessage = " + CsUtility.QuotedString(systemMessage) + @"; "; codeBuilder.InsertCode(onEnterInterpretSqlError, WritableOrmDataStructureCodeGenerator.OnDatabaseErrorTag, info.DataStructure); } if (info.Referenced is IWritableOrmDataStructure) { string onDeleteInterpretSqlError = @"if (interpretedException is Rhetos.UserException && Rhetos.Utilities.MsSqlUtility.IsReferenceErrorOnDelete(interpretedException, " + CsUtility.QuotedString(ormDataStructure.GetOrmSchema() + "." + ormDataStructure.GetOrmDatabaseObject()) + @", " + CsUtility.QuotedString(info.Name + "ID") + @", " + CsUtility.QuotedString(ReferencePropertyConstraintDatabaseDefinition.GetConstraintName(info)) + @")) ((Rhetos.UserException)interpretedException).SystemMessage = " + CsUtility.QuotedString(systemMessage) + @"; "; codeBuilder.InsertCode(onDeleteInterpretSqlError, WritableOrmDataStructureCodeGenerator.OnDatabaseErrorTag, info.Referenced); } } }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { PropertyHelper.GenerateCodeForType((PropertyInfo)conceptInfo, codeBuilder, "Guid?"); PropertyHelper.GenerateStorageMapping((PropertyInfo)conceptInfo, codeBuilder, "System.Data.SqlDbType.UniqueIdentifier"); }
public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder) { PropertyInfo info = (PropertyInfo)conceptInfo; PropertyHelper.GenerateCodeForType(info, codeBuilder, "string"); }