internal AttributedMetaDataMember(AttributedMetaType metaType, MemberInfo mi, int ordinal) { this.declaringType = mi.DeclaringType; this.metaType = metaType; this.member = mi; this.ordinal = ordinal; this.type = TypeSystem.GetMemberType(mi); this.isNullableType = TypeSystem.IsNullableType(this.type); this.attrColumn = (ColumnAttribute)Attribute.GetCustomAttribute(mi, typeof(ColumnAttribute)); this.attrAssoc = (AssociationAttribute)Attribute.GetCustomAttribute(mi, typeof(AssociationAttribute)); this.attr = (this.attrColumn != null) ? (DataAttribute)this.attrColumn : (DataAttribute)this.attrAssoc; if(this.attr != null && this.attr.Storage != null) { MemberInfo[] mis = mi.DeclaringType.GetMember(this.attr.Storage, BindingFlags.Instance | BindingFlags.NonPublic); if(mis == null || mis.Length != 1) { throw Error.BadStorageProperty(this.attr.Storage, mi.DeclaringType, mi.Name); } this.storageMember = mis[0]; } Type storageType = this.storageMember != null ? TypeSystem.GetMemberType(this.storageMember) : this.type; this.isDeferred = IsDeferredType(storageType); if(attrColumn != null && attrColumn.IsDbGenerated && attrColumn.IsPrimaryKey) { // auto-gen identities must be synced on insert if((attrColumn.AutoSync != AutoSync.Default) && (attrColumn.AutoSync != AutoSync.OnInsert)) { throw Error.IncorrectAutoSyncSpecification(mi.Name); } } }
protected AttributedAbstractMetaDataMember(MemberInfo member, MetaType declaringType, DataAttribute attribute) { memberInfo = member; memberAccessor = LambdaMetaAccessor.Create(member, declaringType.Type); this.declaringType = declaringType; if(attribute.Storage != null) { storageMember = member.DeclaringType.GetSingleMember(attribute.Storage); if (storageMember != null) storageAccessor = LambdaMetaAccessor.Create(storageMember, declaringType.Type); } }