예제 #1
0
        /// <summary>
        /// 建方法
        /// </summary>
        /// <param name="classType"></param>
        /// <param name="inspectorFieldBuilder"></param>
        /// <param name="typeBuilder"></param>
        private void BuildMethod(Type classType, TypeBuilder typeBuilder)
        {
            EntityInfoHandle entityInfo = EntityInfoManager.GetEntityHandle(classType);
            MethodInfo       method     = null;

            foreach (EntityPropertyInfo pInfo in entityInfo.PropertyInfo)
            {
                UpdatePropertyInfo updateInfo = entityInfo.GetUpdatePropertyInfo(pInfo.PropertyName);
                if (updateInfo != null)
                {
                    method = _mapupdateMethod;//如果是关联属性则调用OnMapPropertyUpdated
                }
                else
                {
                    method = _updateMethod;//如果是一般属性则调用OnPropertyUpdated通知
                }
                BuildEmit(classType, pInfo.BelongPropertyInfo, typeBuilder, method);
            }


            foreach (EntityMappingInfo mInfo in entityInfo.MappingInfo)
            {
                FieldInfo finfo = mInfo.BelongFieldInfo;
                if (mInfo.IsParent)
                {
                    BuildEmit(classType, mInfo.BelongPropertyInfo, typeBuilder, _mapupdateMethod);      //创建set方法
                    BuildMapEmit(classType, mInfo.BelongPropertyInfo, finfo, typeBuilder, _fillParent); //创建get方法
                }
                else
                {
                    BuildMapEmit(classType, mInfo.BelongPropertyInfo, finfo, typeBuilder, _fillChildMethod);//创建get方法
                }
            }
        }
예제 #2
0
        /// <summary>
        /// 通知映射属性已经被修改
        /// </summary>
        /// <param name="propertyName"></param>
        protected internal virtual void OnMapPropertyUpdated(string propertyName)
        {
            EntityInfoHandle   entityInfo = GetEntityInfo();
            UpdatePropertyInfo updateInfo = entityInfo.GetUpdatePropertyInfo(propertyName);

            if (updateInfo != null)
            {
                string updatePropertyName = updateInfo.UpdateProperty(this);
                if (!string.IsNullOrEmpty(updatePropertyName))
                {
                    OnPropertyUpdated(updatePropertyName);
                }
                else
                {
                    OnPropertyUpdated(propertyName);
                }
            }
        }