/// <summary>
        /// 对一个operation执行一个操作
        /// </summary>
        /// <param name="ob"></param>
        /// <param name="operation"></param>
        public void ExcuteOperation(IObjectProxy ob, IOperation operation)
        {
            List <object> param      = new List <object>();
            List <object> contravlue = new List <object>();



            foreach (var command in operation.GetCommands().OrderBy(p => p.Index))
            {
                switch (command.CommandsType)
                {
                case CommandsType.SetAccess:
                    //设置一个属性是否可用,这段是没问题的。。
                    ob.NotifyPropertyCanSet(command.Property, System.Convert.ToBoolean(command.Exp));
                    break;

                case CommandsType.SetValue:
                    //给一个属性赋值,这段也OK,要好发写一下GetValue
                    ob[command.Property] = GetValue(command.Property, ob, command.Exp);
                    break;

                case CommandsType.ExuteProprtyModelMethod:
                    //执行属性的模型操作
                    ExuctePropertyModelMethod(ob, command);
                    break;

                case CommandsType.ExuteListMethod:
                    ///执行List的操作 也没问题。
                    ExcuteListMethod(ob, command);
                    break;

                case CommandsType.ExuteOutModelMethod:
                    ///执行外部模型的操作的
                    var desmodel = this.ExcuteOperation(
                        command.ArgModel,
                        command.ArgModel.Operations.FirstOrDefault(p => p.Name.Trim().ToUpper() == command.Exp.Trim().ToUpper()),
                        ob,
                        String.IsNullOrEmpty(command.ArgSourceIdExp)?"":GetValue(command.Property, ob, command.ArgSourceIdExp));
                    if (desmodel != null && command.Property != null)
                    {
                        ob[command.Property] = GetValue(command.Property, desmodel, command.ArgPropertyExp);
                    }
                    break;

                case CommandsType.Filter:
                    CheckCommand(command, ob);
                    break;

                case CommandsType.SetParamValue:
                    var paramOb = GetValue(command.Property, ob, command.Exp);
                    var valueOb = paramOb;
                    if (paramOb is IObjectProxy)
                    {
                        valueOb = new ModelHelper(this.ContextFac).GetFromProxy(valueOb as IObjectProxy);
                    }
                    param.Add(valueOb);
                    break;

                case CommandsType.SetConStrValue:
                    paramOb = GetValue(command.Property, ob, command.Exp);
                    valueOb = paramOb;
                    if (paramOb is IObjectProxy)
                    {
                        valueOb = new ModelHelper(this.ContextFac).GetFromProxy(valueOb as IObjectProxy);
                    }

                    contravlue.Add(valueOb);
                    break;

                default:
                    break;
                }
            }
            var db = new SqlServer.dbContext((ob.Model.SqlCon == null ? ob.Model.Module.SqlCon : ob.Model.SqlCon), this.ContextFac);

            //// System.Diagnostics.Trace.WriteLine("Operatoin Type :" + operation.BaseOperationType);
            switch (operation.BaseOperationType)
            {
            case BaseOperationType.Create:
                db.Create(ob);
                break;

            case BaseOperationType.Delete:
                db.Delete(ob);
                break;

            case BaseOperationType.Update:
                db.Save(ob);
                break;

            case BaseOperationType.Assebmly:
            {
                var ass          = System.Reflection.Assembly.Load(operation.InvokeDLL);
                var invokeOb     = ass.CreateInstance(operation.InvokeClass, true, System.Reflection.BindingFlags.CreateInstance, null, contravlue.ToArray(), null, null);
                var type         = ass.GetType(operation.InvokeClass);
                var invokemethod = type.GetMethod(operation.InvokeMethod);
                if (String.IsNullOrEmpty(ob.Model.ClassName))
                {
                    //invokemethod.Invoke(invokeOb, new object[] { ob });
                    param.Insert(0, ob);
                }
                else
                {
                    var busiOb = new ModelHelper(this.ContextFac).GetFromProxy(ob);
                    param.Insert(0, busiOb);
                }


                invokemethod.Invoke(invokeOb, param.ToArray());
            }
            break;

            default:
                break;
            }
        }