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); }
/// <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); }
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); }
/// <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); }
/// <summary> /// 指定某个属性是否需要直接映射字段 /// </summary> /// <param name="meta"></param> /// <returns></returns> public static EntityPropertyMeta DontMapColumn(this EntityPropertyMeta meta) { meta.ColumnMeta = null; return(meta); }