public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder)
        {
            var info = (UniqueReferenceInfo)conceptInfo;

            if (DslUtility.IsQueryable(info.Extension) && DslUtility.IsQueryable(info.Base))
            {
                DataStructureQueryableCodeGenerator.AddNavigationPropertyWithBackingField(codeBuilder, info.Extension,
                                                                                          csPropertyName: "Base",
                                                                                          propertyType: "Common.Queryable." + info.Base.Module.Name + "_" + info.Base.Name,
                                                                                          additionalSetterCode: "ID = value != null ? value.ID : Guid.Empty;");
                DataStructureQueryableCodeGenerator.AddNavigationPropertyWithBackingField(codeBuilder, info.Base,
                                                                                          csPropertyName: info.ExtensionPropertyName(),
                                                                                          propertyType: "Common.Queryable." + info.Extension.Module.Name + "_" + info.Extension.Name,
                                                                                          additionalSetterCode: null);
            }

            if (UniqueReferenceDatabaseDefinition.IsSupported(info) &&
                info.Extension is IOrmDataStructure &&
                info.Base is IWritableOrmDataStructure)
            {
                var    ormDataStructure          = (IOrmDataStructure)info.Extension;
                string systemMessage             = $"DataStructure:{info.Extension.FullName},Property:ID,Referenced:{info.Base.FullName}";
                string onDeleteInterpretSqlError = @"if (interpretedException is Rhetos.UserException && Rhetos.Utilities.MsSqlUtility.IsReferenceErrorOnDelete(interpretedException, "
                                                   + CsUtility.QuotedString(ormDataStructure.GetOrmSchema() + "." + ormDataStructure.GetOrmDatabaseObject()) + @", "
                                                   + CsUtility.QuotedString("ID") + @", "
                                                   + CsUtility.QuotedString(UniqueReferenceDatabaseDefinition.GetConstraintName(info)) + @"))
                        ((Rhetos.UserException)interpretedException).SystemMessage = " + CsUtility.QuotedString(systemMessage) + @";
                    ";
                codeBuilder.InsertCode(onDeleteInterpretSqlError, WritableOrmDataStructureCodeGenerator.OnDatabaseErrorTag, info.Base);
            }
        }
Ejemplo n.º 2
0
        public void GenerateCode(IConceptInfo conceptInfo, ICodeBuilder codeBuilder)
        {
            var info = (UniqueReferenceInfo)conceptInfo;

            if (DslUtility.IsQueryable(info.Extension) && DslUtility.IsQueryable(info.Base))
            {
                DataStructureQueryableCodeGenerator.AddNavigationPropertyWithBackingField(codeBuilder, info.Extension,
                                                                                          csPropertyName: "Base",
                                                                                          propertyType: "Common.Queryable." + info.Base.Module.Name + "_" + info.Base.Name,
                                                                                          additionalSetterCode: "ID = value != null ? value.ID : Guid.Empty;");
                DataStructureQueryableCodeGenerator.AddNavigationPropertyWithBackingField(codeBuilder, info.Base,
                                                                                          csPropertyName: info.ExtensionPropertyName(),
                                                                                          propertyType: "Common.Queryable." + info.Extension.Module.Name + "_" + info.Extension.Name,
                                                                                          additionalSetterCode: null);
            }

            if (info.Extension is IOrmDataStructure && info.Base is IOrmDataStructure)
            {
                codeBuilder.InsertCode(
                    string.Format("modelBuilder.Entity<Common.Queryable.{0}_{1}>().HasRequired(t => t.Base).WithOptional(t => t.{2});\r\n            ",
                                  info.Extension.Module.Name, info.Extension.Name, info.ExtensionPropertyName()),
                    DomInitializationCodeGenerator.EntityFrameworkOnModelCreatingTag);
            }
            else if (info.Extension is IOrmDataStructure)
            {
                codeBuilder.InsertCode(
                    string.Format("modelBuilder.Entity<Common.Queryable.{0}_{1}>().Ignore(t => t.Base);\r\n            ",
                                  info.Extension.Module.Name, info.Extension.Name),
                    DomInitializationCodeGenerator.EntityFrameworkOnModelCreatingTag);
            }
            else if (info.Base is IOrmDataStructure)
            {
                codeBuilder.InsertCode(
                    string.Format("modelBuilder.Entity<Common.Queryable.{0}_{1}>().Ignore(t => t.{2});\r\n            ",
                                  info.Base.Module.Name, info.Base.Name, info.ExtensionPropertyName()),
                    DomInitializationCodeGenerator.EntityFrameworkOnModelCreatingTag);
            }

            if (UniqueReferenceDatabaseDefinition.IsSupported(info) &&
                info.Extension is IOrmDataStructure &&
                info.Base is IWritableOrmDataStructure)
            {
                var    ormDataStructure          = (IOrmDataStructure)info.Extension;
                string systemMessage             = "DataStructure:" + info.Extension + ",Property:ID,Referenced:" + info.Base;
                string onDeleteInterpretSqlError = @"if (interpretedException is Rhetos.UserException && Rhetos.Utilities.MsSqlUtility.IsReferenceErrorOnDelete(interpretedException, "
                                                   + CsUtility.QuotedString(ormDataStructure.GetOrmSchema() + "." + ormDataStructure.GetOrmDatabaseObject()) + @", "
                                                   + CsUtility.QuotedString("ID") + @", "
                                                   + CsUtility.QuotedString(UniqueReferenceDatabaseDefinition.GetConstraintName(info)) + @"))
                    ((Rhetos.UserException)interpretedException).SystemMessage = " + CsUtility.QuotedString(systemMessage) + @";
                ";
                codeBuilder.InsertCode(onDeleteInterpretSqlError, WritableOrmDataStructureCodeGenerator.OnDatabaseErrorTag, info.Base);
            }
        }