Пример #1
0
        public ManyToOneRelation NewManyToOneRelation(ModelClass pkClass, ModelClass fkClass, string fkColumn)
        {
            ManyToOneRelation relation = new ManyToOneRelation(fkClass, pkClass)
            {
                SourceColumn       = fkColumn,
                TargetColumnKey    = fkColumn,
                TargetTable        = fkClass.Table,
                TargetPropertyName = NamingHelper.GetPlural(fkClass.Name)
            };

            return(relation);
        }
Пример #2
0
        public ManyToOneRelation NewManyToOneRelation(ModelClass pkClass, ModelClass fkClass, string fkColumn)
        {
            ManyToOneRelation relation = new ManyToOneRelation(fkClass, pkClass);

            // TODO: Disabled to test server explorer drag drop bug of DeviceBuffer

            /*Log(
             *  String.Format("Relation: Type=ManyToOne, PKClass={0}, FKClass={1}, Column={2}", pkClass.Name,
             *                fkClass.Name, fkColumn));*/
            relation.SourceColumn       = fkColumn;
            relation.TargetColumnKey    = fkColumn;
            relation.TargetTable        = fkClass.Table;
            relation.TargetPropertyName = NamingHelper.GetPlural(fkClass.Name);

            return(relation);
        }
Пример #3
0
        private void GenerateBelongsToRelation(CodeTypeDeclaration classDeclaration, CodeNamespace nameSpace,
                                               ManyToOneRelation relationship)
        {
            if (!String.IsNullOrEmpty(relationship.TargetColumnKey) && (!String.IsNullOrEmpty(relationship.SourceColumn)) &&
                !relationship.SourceColumn.ToUpperInvariant().Equals(relationship.TargetColumnKey.ToUpperInvariant()))
                throw new ArgumentException(
                    String.Format(
                        "Class {0} column name does not match with column key {1} on it's many to one relation to class {2}",
                        relationship.Source.Name, relationship.TargetColumnKey, relationship.Target.Name));

            CodeTypeDeclaration targetClass = GenerateClass(relationship.Target, nameSpace);

            string propertyName = String.IsNullOrEmpty(relationship.SourcePropertyName)
                                      ? targetClass.Name
                                      : relationship.SourcePropertyName;

            // We use PropertyAccess.Property to default it to camel case underscore
            CodeMemberField memberField = GetMemberField(propertyName, targetClass.Name, Accessor.Private, PropertyAccess.Property);
            classDeclaration.Members.Add(memberField);

            CodeMemberProperty memberProperty;
            if (String.IsNullOrEmpty(relationship.SourceDescription))
                memberProperty = GetMemberProperty(memberField, propertyName, true, true, relationship.Source.DoesImplementINotifyPropertyChanged(), null);
            else
                memberProperty =
                    GetMemberProperty(memberField, propertyName, true, true, relationship.Source.DoesImplementINotifyPropertyChanged(),
                                      relationship.SourceDescription);
            classDeclaration.Members.Add(memberProperty);

            memberProperty.CustomAttributes.Add(relationship.GetBelongsToAttribute());
        }
Пример #4
0
        private void GenerateHasManyRelation(CodeTypeDeclaration classDeclaration, CodeNamespace nameSpace,
                                             ManyToOneRelation relationship)
        {
            CodeTypeDeclaration sourceClass = GenerateClass(relationship.Source, nameSpace);

            string propertyName = String.IsNullOrEmpty(relationship.TargetPropertyName)
                                      ? NamingHelper.GetPlural(sourceClass.Name)
                                      : NamingHelper.GetPlural(relationship.TargetPropertyName);
            string propertyType = String.IsNullOrEmpty(relationship.TargetPropertyType)
                                      ? GenericListInterface
                                      : relationship.TargetPropertyType;

            CodeMemberField memberField;
            if (!relationship.Source.AreRelationsGeneric())
                memberField = GetMemberField(propertyName, propertyType, Accessor.Private, relationship.TargetAccess);
            else
                memberField = GetGenericMemberField(sourceClass.Name, propertyName, propertyType, Accessor.Private, relationship.TargetAccess);
            classDeclaration.Members.Add(memberField);

            // initalise field
            if (_model.InitializeIListFields && propertyType == GenericListInterface)
            {
                CodeObjectCreateExpression fieldCreator = new CodeObjectCreateExpression();

                CodeTypeReference fieldCreatorType = new CodeTypeReference(GenericListClass);

                fieldCreatorType.TypeArguments.Add(sourceClass.Name);
                fieldCreator.CreateType = fieldCreatorType;

                memberField.InitExpression = fieldCreator;
            }

            CodeMemberProperty memberProperty;
            if (String.IsNullOrEmpty(relationship.TargetDescription))
                memberProperty = GetMemberProperty(memberField, propertyName, true, true, relationship.Target.DoesImplementINotifyPropertyChanged(), null);
            else
                memberProperty =
                    GetMemberProperty(memberField, propertyName, true, true, relationship.Target.DoesImplementINotifyPropertyChanged(),
                                      relationship.TargetDescription);
            classDeclaration.Members.Add(memberProperty);

            memberProperty.CustomAttributes.Add(relationship.GetHasManyAttribute());
        }
Пример #5
0
        public ManyToOneRelation NewManyToOneRelation(ModelClass pkClass, ModelClass fkClass, string fkColumn)
        {
            ManyToOneRelation relation = new ManyToOneRelation(fkClass, pkClass);
            // TODO: Disabled to test server explorer drag drop bug of DeviceBuffer
            /*Log(
                String.Format("Relation: Type=ManyToOne, PKClass={0}, FKClass={1}, Column={2}", pkClass.Name,
                              fkClass.Name, fkColumn));*/
            relation.SourceColumn = fkColumn;
            relation.TargetColumnKey = fkColumn;
            relation.TargetTable = fkClass.Table;
            relation.TargetPropertyName = NamingHelper.GetPlural(fkClass.Name);

            return relation;
        }
Пример #6
0
 private void GenerateHasManyRelation(CodeTypeDeclaration classDeclaration, CodeNamespace nameSpace,
                                      ManyToOneRelation relationship)
 {
     if (relationship.TargetPropertyGenerated)
         GenerateHasMany(
             classDeclaration,
             relationship.Target.Name,
             relationship.EffectiveTargetPropertyName,
             relationship.TargetPropertyType,
             relationship.EffectiveTargetAccess,
             relationship.TargetDescription,
             relationship.GetHasManyAttribute(Context),
             relationship.Source.AreRelationsGeneric(),
             relationship.Target.DoesImplementINotifyPropertyChanged(),
             relationship.Target.DoesImplementINotifyPropertyChanging(),
             relationship.Source.Name,
             relationship.EffectiveSourcePropertyName,
             relationship.EffectiveAutomaticAssociations,
             false,
             null);
 }
Пример #7
0
        private void GenerateBelongsToRelation(CodeTypeDeclaration classDeclaration, CodeNamespace nameSpace,
                                               ManyToOneRelation relationship)
        {
            if (relationship.SourcePropertyGenerated)
            {
                if (!String.IsNullOrEmpty(relationship.TargetColumnKey) && (!String.IsNullOrEmpty(relationship.EffectiveSourceColumn)) &&
                    !relationship.EffectiveSourceColumn.ToUpperInvariant().Equals(relationship.TargetColumnKey.ToUpperInvariant()))
                    throw new ArgumentException(
                        String.Format(
                            "Class {0} column name does not match with column key {1} on it's many to one relation to class {2}",
                            relationship.Source.Name, relationship.TargetColumnKey, relationship.Target.Name));

                #warning We might use PropertyAccess.Property which uses the model's CaseOfPrivateFields to get the name.  If it's FieldCase.Unchanged, bad things happen.
                CodeMemberField memberField = GetMemberField(relationship.EffectiveSourcePropertyName, relationship.Target.Name, Accessor.Private, relationship.EffectiveSourceAccess);
                classDeclaration.Members.Add(memberField);

                string automaticAssociationCollectionName =
                    relationship.EffectiveAutomaticAssociations
                        ? relationship.EffectiveTargetPropertyName
                        : null;

                CodeMemberProperty memberProperty = GetMemberProperty(memberField, relationship.EffectiveSourcePropertyName, automaticAssociationCollectionName, relationship.Source.Name, true, true, relationship.Source.DoesImplementINotifyPropertyChanged(), relationship.Source.DoesImplementINotifyPropertyChanging(), relationship.SourceDescription == "" ? null : relationship.SourceDescription);
                classDeclaration.Members.Add(memberProperty);

                memberProperty.CustomAttributes.Add(relationship.GetBelongsToAttribute());
            }
        }
Пример #8
0
 public ManyToOneRelation NewManyToOneRelation(ModelClass pkClass, ModelClass fkClass, string fkColumn)
 {
     ManyToOneRelation relation = new ManyToOneRelation(fkClass, pkClass)
                                      {
                                          SourceColumn = fkColumn,
                                          TargetColumnKey = fkColumn,
                                          TargetTable = fkClass.Table,
                                          TargetPropertyName = NamingHelper.GetPlural(fkClass.Name)
                                      };
     return relation;
 }