/// <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方法 } } }
/// <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); } } }