コード例 #1
0
        public EntityPropertyMeta CreateExtensionPropertyMeta(IManagedProperty mp, EntityMeta em)
        {
            var epm = new EntityPropertyMeta()
            {
                Owner           = em,
                Runtime         = new ManagedPropertyRuntime(mp),
                PropertyType    = mp.PropertyType,
                ManagedProperty = mp,
            };

            em.EntityProperties.Add(epm);

            return(epm);
        }
コード例 #2
0
ファイル: MetaExtension.cs プロジェクト: iraychen/Rafy
        /// <summary>
        /// 开始指定某个属性直接映射字段的详细信息
        /// </summary>
        /// <param name="meta"></param>
        /// <returns></returns>
        public static ColumnMeta MapColumn(this EntityPropertyMeta meta)
        {
            if (meta.ManagedProperty is IRefEntityProperty)
            {
                throw new InvalidOperationException(string.Format(
                                                        "引用实体属性 {0} 不能映射数据库,请使用相应的 id 属性。", meta.Name
                                                        ));
            }

            if (meta.ColumnMeta == null)
            {
                meta.ColumnMeta = new ColumnMeta();
            }

            return(meta.ColumnMeta);
        }
コード例 #3
0
ファイル: EntityMetaRepository.cs プロジェクト: iraychen/Rafy
        private EntityPropertyMeta CreateEntityPropertyMeta(IManagedProperty mp, EntityMeta entityMeta)
        {
            var propertyType = mp.PropertyType;

            if (mp == EntityConvention.Property_Id)
            {
                propertyType = entityMeta.IdType;
            }
            else if (mp == EntityConvention.Property_TreePId)
            {
                propertyType = entityMeta.IdType;
                if (!propertyType.IsClass)
                {
                    propertyType = typeof(Nullable <>).MakeGenericType(entityMeta.IdType);
                }
            }
            var item = new EntityPropertyMeta
            {
                Owner           = entityMeta,
                Runtime         = new ManagedPropertyRuntime(mp),
                PropertyType    = propertyType,
                ManagedProperty = mp
            };

            #region 创建 ReferenceInfo 及聚合子类

            var refMP = mp as IRefEntityProperty;
            if (refMP != null)
            {
                var ri = new ReferenceInfo()
                {
                    RefEntityProperty = refMP
                };

                this.CreateReference(ri, entityMeta);

                item.ReferenceInfo = ri;
            }

            #endregion

            entityMeta.EntityProperties.Add(item);

            return(item);
        }
コード例 #4
0
        /// <summary>
        /// 找到实体中对应聚合关系中的父实体引用属性元数据。
        ///
        /// 注意,此函数返回的是引用实体属性,而非引用 Id 属性。
        /// </summary>
        /// <returns></returns>
        public EntityPropertyMeta FindParentReferenceProperty()
        {
            if (!_parentPropertyCacheLoaded)
            {
                var result = this.EntityProperties
                             .Where(p => p.ReferenceInfo != null && p.ReferenceInfo.Type == ReferenceType.Parent).ToArray();

                if (result.Length > 1)
                {
                    throw new InvalidOperationException(string.Format("类 {0} 中定义了两个父引用属性。(一个类中只能定义一个父引用属性。)", this.Name));
                }

                _parentPropertyCache       = result.Length > 0 ? result[0] : null;
                _parentPropertyCacheLoaded = true;
            }

            return(_parentPropertyCache);
        }
コード例 #5
0
        /// <summary>
        /// 指定某个属性是否需要直接映射字段
        /// </summary>
        /// <param name="meta"></param>
        /// <returns></returns>
        public static EntityPropertyMeta DontMapColumn(this EntityPropertyMeta meta)
        {
            meta.ColumnMeta = null;

            return(meta);
        }