public override void InitMemberInfo(object member, XafMemberInfo memberInfo) { base.InitMemberInfo(member, memberInfo); var typeMetadata = Metadata.FirstOrDefault(tm => tm.Type == memberInfo.Owner.Type); if (typeMetadata != null) { if (typeMetadata.KeyPropertyName == memberInfo.Name) { memberInfo.IsKey = true; memberInfo.AddAttribute(new VisibleInDetailViewAttribute(false)); memberInfo.AddAttribute(new VisibleInListViewAttribute(false)); memberInfo.Owner.KeyMember = memberInfo; memberInfo.IsPersistent = true; } if (memberInfo.ListElementType != null) { var associatedTypeInfo = typesInfo.FindTypeInfo(memberInfo.ListElementType); memberInfo.AssociatedMemberInfo = (XafMemberInfo)associatedTypeInfo.Members.FirstOrDefault(m => m.MemberType == memberInfo.Owner.Type); if (memberInfo.AssociatedMemberInfo != null) { memberInfo.IsAssociation = true; memberInfo.AssociatedMemberInfo.IsReferenceToOwner = true; memberInfo.AssociatedMemberOwner = associatedTypeInfo.Type; memberInfo.IsAggregated = true; } } memberInfo.IsPersistent = !memberInfo.IsReadOnly; } }
private static void InitializeKeyProperty(XafMemberInfo memberInfo) { memberInfo.IsKey = true; memberInfo.AddAttribute(new VisibleInDetailViewAttribute(false)); memberInfo.AddAttribute(new VisibleInListViewAttribute(false)); memberInfo.Owner.KeyMember = memberInfo; memberInfo.IsPersistent = true; }
public override void InitMemberInfo(object member, XafMemberInfo memberInfo) { base.InitMemberInfo(member, memberInfo); if (memberInfo.Owner.IsInterface) { return; } var typeMetadata = Metadata.FirstOrDefault(tm => memberInfo.Owner.Type.IsAssignableFrom(tm.Type)); PropertyDescriptor descriptor = member as PropertyDescriptor; if (descriptor != null) { foreach (Attribute attr in descriptor.Attributes) { if (!memberInfo.Attributes.Any(a => a.GetType() == attr.GetType())) { memberInfo.AddAttribute(attr); } } } if (typeMetadata != null) { IPropertyMetadata propertyMetadata = typeMetadata.Properties.FirstOrDefault(p => p.Name == memberInfo.Name); if (propertyMetadata != null) { if (Equals(typeMetadata.KeyProperty, propertyMetadata)) { InitializeKeyProperty(memberInfo); } switch (propertyMetadata.RelationType) { case RelationType.OneToMany: InitializeOneToMany(memberInfo); break; case RelationType.ManyToMany: InitializeManyToMany(memberInfo); break; case RelationType.Reference: memberInfo.IsAssociation = true; break; } memberInfo.IsPersistent = !memberInfo.IsReadOnly; } } }
public override void InitMemberInfo(object member, XafMemberInfo memberInfo) { base.InitMemberInfo(member, memberInfo); if (memberInfo.Owner.IsInterface) return; var typeMetadata = Metadata.FirstOrDefault(tm => memberInfo.Owner.Type.IsAssignableFrom(tm.Type)); PropertyDescriptor descriptor = member as PropertyDescriptor; if (descriptor != null) { foreach (Attribute attr in descriptor.Attributes) if (!memberInfo.Attributes.Any(a => a.GetType() == attr.GetType())) memberInfo.AddAttribute(attr); } if (typeMetadata != null) { IPropertyMetadata propertyMetadata = typeMetadata.Properties.FirstOrDefault(p => p.Name == memberInfo.Name); if (propertyMetadata != null) { if (Equals(typeMetadata.KeyProperty, propertyMetadata)) { InitializeKeyProperty(memberInfo); } switch (propertyMetadata.RelationType) { case RelationType.OneToMany: InitializeOneToMany(memberInfo); break; case RelationType.ManyToMany: InitializeManyToMany(memberInfo); break; case RelationType.Reference: break; } memberInfo.IsPersistent = !memberInfo.IsReadOnly; } } }