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); }
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); }
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()); }
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()); }
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; }
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); }
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()); } }
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; }