Example #1
0
 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));
 }
Example #4
0
        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;
        }