public EntityMemberInfo(EntityInfo entity, EntityMemberKind kind, string name, Type dataType) { Entity = entity; Kind = kind; MemberName = ColumnName = DisplayName = name; DataType = dataType; if (DataType.IsNullableValueType()) { Flags |= EntityMemberFlags.Nullable; } //Set to nullable if it is Nullable generic if (DataType == typeof(decimal) || DataType == typeof(decimal?)) { this.Precision = 18; //defaults this.Scale = 4; } this.AreValuesEqual = MemberValueGettersSetters.AreObjectsEqual; //Assign default get/set handlers and to-from string converters, and comparer method MemberValueGettersSetters.AssignDefaultGetSetHandlers(this); MemberStringConverters.AssignStringConverters(this); Entity.AddMember(this); }
private bool TryGetMemberKind(EntityInfo entity, string memberName, Type dataType, out EntityMemberKind kind) { kind = EntityMemberKind.Column; if (dataType.IsValueType || dataType == typeof(string)) { return(true); } var genType = dataType.IsGenericType ? dataType.GetGenericTypeDefinition() : null; if (genType == typeof(Nullable <>)) { return(true); } if (Model.IsEntity(dataType)) { kind = EntityMemberKind.EntityRef; var target = Model.GetEntityInfo(dataType); if (target != null) { return(true); } Log.LogError($"Invalid entity reference, type {dataType} is not registered as an entity. Entity member: {entity.Name}.{memberName}"); return(false); } if (genType == typeof(IList <>)) { kind = EntityMemberKind.EntityList; return(true); } // properly report common mistake if (genType == typeof(List <>)) { Log.LogError($"Invalid entity member {entity.Name}.{memberName}. Use IList<T> interface for list members. "); return(false); } //default: Column return(true); //Column; there are some specific types that turn into column (Binary for ex) }
private bool TryGetMemberKind(EntityInfo entity, PropertyInfo property, out EntityMemberKind kind) { return(TryGetMemberKind(entity, property.Name, property.PropertyType, out kind)); }
public EntityMemberInfo[] DependentMembers; //array of (computed) members that depend on this member public EntityMemberInfo(EntityInfo entity, EntityMemberKind kind, PropertyInfo property) : this(entity, kind, property.Name, property.PropertyType) { ClrMemberInfo = property; }