예제 #1
0
        public T InsertT <T>(string tableName, BeeDataAdapter dataAdapter, bool removeIdentity)
        {
            ThrowExceptionUtil.ArgumentNotNullOrEmpty(tableName, "tableName");
            ThrowExceptionUtil.ArgumentNotNull(dataAdapter, "dataAdapter");

            if (removeIdentity)
            {
                TableSchema tableSchema = GetTableSchema(tableName);
                ThrowExceptionUtil.ArgumentConditionTrue(tableSchema != null, "tableName", "can not find table. Name:{0}".FormatWith(tableName));
                if (tableSchema.IdentityColumn != null)
                {
                    dataAdapter.RemoveKey(tableSchema.IdentityColumn.ColumnName);
                }
                else
                {
                    dataAdapter.RemoveKey(Constants.DefaultIdentityColumnName);
                }
            }

            T result = default(T);
            InsertBeeCommand insertBeeCommand =
                new InsertBeeCommand(this, tableName, dataAdapter, Constants.DefaultIdentityColumnName);

            result = insertBeeCommand.Excute <T>();

            return(result);
        }
예제 #2
0
        /// <summary>
        /// 保存数据。
        /// 默认的表名就是类名, 若T类型上有指定的表名,则以此为准
        /// 默认的自增列为Id,若T类型上有指定的自增列, 则以此为准。
        /// 若value中的标识列大于0, 则修改。 若小于等于0, 则新增。
        /// 注:主键为int
        /// </summary>
        /// <typeparam name="T">类型</typeparam>
        /// <param name="value">类型值</param>
        /// <returns>新增则返回自增列, 修改则返回本身标示列值。</returns>
        public int Save <T>(T value) where T : class
        {
            ThrowExceptionUtil.ArgumentNotNull(value, "value");

            string identityColumnName = OrmUtil.GetIdentityColumnName <T>();

            string tableName = OrmUtil.GetTableName <T>();

            EntityProxy <T> entityProxy = EntityProxyManager.Instance.GetEntityProxy <T>();

            object identity = entityProxy.GetPropertyValue(value, identityColumnName);

            ThrowExceptionUtil.ArgumentConditionTrue(identity != null, string.Empty, "未指定主键列");

            if ((int)identity <= 0)
            {
                return(Insert <T>(value));
            }
            else
            {
                BeeDataAdapter dataAdapter = BeeDataAdapter.From <T>(value);
                dataAdapter.RemoveKey(identityColumnName);

                Update(tableName, dataAdapter, SqlCriteria.New.Equal(identityColumnName, identity));

                return((int)identity);
            }
        }
예제 #3
0
        protected string RenderHtml(string controller, string action, BeeDataAdapter dataAdapter)
        {
            string result = string.Empty;

            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (StreamWriter streamWriter = new StreamWriter(memoryStream, Encoding.UTF8))
                {
                    HttpWorkerRequest wr          = new System.Web.Hosting.SimpleWorkerRequest("index.htm", string.Empty, streamWriter);
                    HttpContext       httpContext = new HttpContext(wr);
                    httpContext.Response.ContentEncoding = Encoding.Default;

                    MvcDispatcher.ExecuteAction(httpContext, controller, action, dataAdapter);

                    httpContext.Response.Flush();
                    streamWriter.Flush();

                    memoryStream.Position = 0;
                    //using (StreamReader reader = new StreamReader(memoryStream, Encoding.UTF8))
                    //{
                    //    result = reader.ReadToEnd();
                    //}
                    result = Encoding.UTF8.GetString(memoryStream.ToArray());
                }
            }

            return(result);
        }
예제 #4
0
 public ActionExecutingArgs(string controllerName, string actionName, BeeDataAdapter dataAdapter)
 {
     ControllerName = controllerName;
     ActionName     = actionName;
     Data           = dataAdapter;
     Result         = ActionExecutingResult.OK;
 }
예제 #5
0
        /// <summary>
        /// 转换辅助类。 mapping暂未使用
        /// </summary>
        /// <param name="type"></param>
        /// <param name="dataAdapter"></param>
        /// <param name="mapping"></param>
        /// <returns></returns>
        private static object ConvertDataToObject(Type type, BeeDataAdapter dataAdapter, Dictionary <string, string> mapping)
        {
            ThrowExceptionUtil.ArgumentNotNull(type, "type");
            ThrowExceptionUtil.ArgumentNotNull(dataAdapter, "dataAdapter");

            object result = ReflectionUtil.CreateInstance(type);

            if (result != null)
            {
                IEntityProxy entityProxy = EntityProxyManager.Instance.GetEntityProxyFromType(type);

                foreach (string key in dataAdapter.Keys)
                {
                    string value = dataAdapter[key] as string;
                    if (value != null && value.Length == 0)
                    {
                        /// 空字符串并且目标类型不是字符型则不转换
                        PropertySchema schema = entityProxy[key];
                        if (schema != null && schema.PropertyType != typeof(string))
                        {
                            continue;
                        }
                    }

                    entityProxy.SetPropertyValue(result, key, dataAdapter[key]);
                }
            }

            return(result);
        }
예제 #6
0
        /// <summary>
        /// Provided for common clone for the object.
        /// the object should be a class.
        /// </summary>
        /// <typeparam name="T">the type of the object</typeparam>
        /// <param name="value">the instance of the type.</param>
        /// <returns>the cloned instance.</returns>
        public static T CommonClone <T>(object value) where T : class
        {
            ThrowExceptionUtil.ArgumentNotNull(value, "value");
            BeeDataAdapter dataAdapter = BeeDataAdapter.From(value);

            return(ConvertDataToObject <T>(dataAdapter));
        }
예제 #7
0
        protected virtual void ActionError(string controllerName, string actionName, BeeDataAdapter dataAdapter, Exception innerException)
        {
            BeeMvcResult mvcResult = new BeeMvcResult();

            mvcResult.code = 400;
            mvcResult.msg  = innerException.Message;

            var httpException = innerException as HttpException;

            if (httpException != null)
            {
                mvcResult.code = httpException.GetHttpCode();
            }

            var coreException = innerException as CoreException;

            if (coreException != null)
            {
                mvcResult.code = 405;
            }

            Logger.Error("Invoke {0}.{1} error.\r\n{2}".FormatWith(controllerName, actionName, dataAdapter), innerException);

            WriteMvcResult(HttpContextUtil.CurrentHttpContext, mvcResult);
        }
예제 #8
0
        protected override BeeDataAdapter GetRouteData(HttpContext context)
        {
            BeeDataAdapter result = new BeeDataAdapter();

            RouteValueDictionary routeData = RequestContext.RouteData.Values;

            foreach (string item in routeData.Keys)
            {
                if (string.Compare("controller", item, true) == 0)
                {
                    result.Add(Constants.BeeControllerName, routeData[item]);
                }
                else if (string.Compare("action", item, true) == 0)
                {
                    result.Add(Constants.BeeActionName, routeData[item]);
                }
                else if (string.Compare("area", item, true) == 0)
                {
                    result.Add(Constants.BeeAreaName, routeData[item]);
                }
                else
                {
                    result.Add(item, routeData[item]);
                }
            }

            return(result);
        }
예제 #9
0
        internal void Init(HttpContext httpContext, ControllerInfo controllerInfo, BeeDataAdapter viewData, string actionName)
        {
            this.httpContext = httpContext;

            Init(controllerInfo, viewData);
            this.currentActionName = actionName;
        }
예제 #10
0
        public void Check(BeeDataAdapter dataAdapter)
        {
            WeiXinInvokeTree invokeTree = FindCurrentInvoke(dataAdapter);

            if (invokeTree == null)
            {
            }
            else
            {
                if (!string.IsNullOrEmpty(invokeTree.AContent))
                {
                    dataAdapter[Constants.BeeActionName] = "InvokeTreeText";
                    dataAdapter["acontent"] = System.Web.HttpUtility.HtmlDecode(invokeTree.AContent);
                }
                else if (!string.IsNullOrEmpty(invokeTree.BContent))
                {
                    dataAdapter[Constants.BeeActionName] = "InvokeTreeArticle";
                    dataAdapter["bcontent"] = System.Web.HttpUtility.HtmlDecode(invokeTree.BContent);
                }
                else
                {
                    if (!string.IsNullOrEmpty(invokeTree.ControllerName) && !string.IsNullOrEmpty(invokeTree.ActionName))
                    {
                        dataAdapter[Constants.BeeControllerName] = invokeTree.ControllerName;
                        dataAdapter[Constants.BeeActionName]     = invokeTree.ActionName;
                    }
                }

                if (!invokeTree.RemainFlag)
                {
                    InvokeContextManager.Instance.CurrentContext(dataAdapter["fromusername"].ToString()).MessageStack.Pop();
                }
            }
        }
예제 #11
0
 /// <summary>
 /// Init the parameter of the pagination. include pagenum, pagesize, recordcount, orderfield, orderdirection.
 /// </summary>
 /// <param name="dataAdapter">the data.</param>
 protected virtual void InitPagePara(BeeDataAdapter dataAdapter)
 {
     ViewData.TryGetValue <int>("pagenum", 1, true);
     ViewData.TryGetValue <int>("pagesize", 20, true);
     ViewData.TryGetValue <int>("recordcount", 0, true);
     ViewData.TryGetValue <string>("orderField", "id", true);
     ViewData.TryGetValue <string>("orderDirection", "desc", true);
 }
예제 #12
0
        /// <summary>
        /// 调用存储过程。
        /// 一般不推荐返回值, 直接将该信息反映在结果集中更好。
        /// </summary>
        /// <param name="spName">存储过程名</param>
        /// <param name="dataAdapter">数据集</param>
        /// <returns>返回结果集</returns>
        public DataTable CallSP(string spName, BeeDataAdapter dataAdapter)
        {
            ThrowExceptionUtil.ArgumentNotNullOrEmpty(spName, "spName");

            SPBeeCommand spBeeCommand = new SPBeeCommand(this, spName, dataAdapter);

            return(spBeeCommand.Excute <DataTable>());
        }
예제 #13
0
        /// <summary>
        /// sql文查询
        /// </summary>
        /// <param name="cmdText">sql文</param>
        /// <param name="dataAdapter">数据集</param>
        /// <returns>结果集</returns>
        public DataTable ExecuteCommand(string cmdText, BeeDataAdapter dataAdapter)
        {
            ThrowExceptionUtil.ArgumentNotNullOrEmpty(cmdText, "cmdText");

            CmdTextBeeCommand cmdTextBeeCommand = new CmdTextBeeCommand(this, cmdText, dataAdapter);

            return(cmdTextBeeCommand.Excute <DataTable>());
        }
예제 #14
0
        public object Test()
        {
            var data  = BeeDataAdapter.New.Add("test", 1).Add("test2", DateTime.Now).Add("test3", 0.5533d).Add("test4", Guid.NewGuid()).Add("test5", null);
            var data2 = BeeDataAdapter.New.Merge(data, true).Add("test6", data);
            var json  = SerializeUtil.ToJson(data2);

            return(BeeDataAdapter.From(json));
        }
예제 #15
0
 // Methods
 public InsertBeeCommand(DbSession owner,
                         string tableName, BeeDataAdapter dataAdapter, string identityColumnName)
     : base(owner, BeeDbCommandBehavior.NoQuery)
 {
     this.tableName          = tableName;
     this.dataAdapter        = dataAdapter;
     this.identityColumnName = identityColumnName;
 }
예제 #16
0
 public override void Delete(int id)
 {
     using (DbSession dbSession = GetDbSession())
     {
         BeeDataAdapter data = new BeeDataAdapter();
         data["delflag"] = true;
         dbSession.Update("WeiXinArticle", data, SqlCriteria.New.Equal("id", id));
     }
 }
예제 #17
0
        public IEnumerable <T> ExecuteDataReader <T>(string cmdText, BeeDataAdapter dataAdapter)
            where T : class
        {
            ThrowExceptionUtil.ArgumentNotNullOrEmpty(cmdText, "cmdText");

            CmdTextBeeCommand cmdTextBeeCommand = new CmdTextBeeCommand(this, cmdText, dataAdapter);

            return(cmdTextBeeCommand.DataRead <T>());
        }
예제 #18
0
        // Methods
        public UpdateBeeCommand(DbSession owner, string tableName, BeeDataAdapter data, SqlCriteria sqlCriteria)
            : base(owner, BeeDbCommandBehavior.NoQuery)
        {
            ThrowExceptionUtil.ArgumentNotNullOrEmpty(tableName, "tableName");
            ThrowExceptionUtil.ArgumentConditionTrue(data != null && data.Count != 0, "data", "data should not be null or empty.");

            this.tableName   = tableName;
            this.dataAdapter = data;
            this.sqlCriteria = sqlCriteria;
        }
예제 #19
0
        /// <summary>
        /// 更新数据
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="dataAdapter">数据集</param>
        /// <param name="sqlCriteria">条件集</param>
        public void Update(string tableName, BeeDataAdapter dataAdapter, SqlCriteria sqlCriteria)
        {
            ThrowExceptionUtil.ArgumentNotNullOrEmpty(tableName, "tableName");
            ThrowExceptionUtil.ArgumentNotNull(dataAdapter, "dataAdapter");

            UpdateBeeCommand updateBeeCommand =
                new UpdateBeeCommand(this, tableName, dataAdapter, sqlCriteria);

            updateBeeCommand.Excute <int>();
        }
예제 #20
0
        internal void Init(ControllerInfo controllerInfo, BeeDataAdapter viewData)
        {
            this.controllerInfo = controllerInfo;
            this.dataAdapter    = viewData;

            if (Inited != null)
            {
                Inited(this, null);
            }
        }
예제 #21
0
        public override PageResult Index(BeeDataAdapter dataAdapter)
        {
            DataTable result;

            using (DbSession dbSession = GetDbSession())
            {
                result = dbSession.Query(TableName, null);
            }

            return(View("Index", result));
        }
예제 #22
0
        public SocketConnection(ISocket socket)
        {
            Socket  = socket;
            OnOpen  = () => { };
            OnClose = () => { };
            OnError = x => { };

            OnMessage = x => { };
            OnBinary  = x => { };

            Session = new BeeDataAdapter();
        }
예제 #23
0
        /// <summary>
        /// sql文查询
        /// </summary>
        /// <param name="cmdText">sql文</param>
        /// <param name="dataAdapter">数据集</param>
        /// <returns>结果集</returns>
        public List <T> ExecuteCommand <T>(string cmdText, BeeDataAdapter dataAdapter)
        {
            List <T>  list      = new List <T>();
            DataTable dataTable = ExecuteCommand(cmdText, dataAdapter);

            if (dataTable != null)
            {
                list = ConvertUtil.ConvertDataToObject <T>(dataTable);
            }

            return(list);
        }
예제 #24
0
        /// <summary>
        /// 调用存储过程。
        /// 一般不推荐返回值, 直接将该信息反映在结果集中更好。
        /// </summary>
        /// <param name="spName">存储过程名</param>
        /// <param name="dataAdapter">数据集</param>
        /// <returns>返回结果集</returns>
        public List <T> CallSP <T>(string spName, BeeDataAdapter dataAdapter)
        {
            List <T> list = new List <T>();

            DataTable dataTable = CallSP(spName, dataAdapter);

            if (dataTable != null)
            {
                list = ConvertUtil.ConvertDataToObject <T>(dataTable);
            }

            return(list);
        }
예제 #25
0
        public void RenderAction(string controller, string action, params string[] data)
        {
            BeeDataAdapter dataAdapter = new BeeDataAdapter();

            foreach (string item in data)
            {
                Match match = ExAttributeRegex.Match(item);
                if (match.Success)
                {
                    dataAdapter[match.Groups["name"].Value] = match.Groups["value"].Value;
                }
            }

            MvcDispatcher.ExecuteAction(controller, action, dataAdapter);
        }
예제 #26
0
        /// <summary>
        /// Provided to fomat string using the razor format.
        /// </summary>
        /// <param name="format">string format</param>
        /// <param name="obj">the instance.</param>
        /// <returns>the converted string.</returns>
        public static string RazorFormat(this string format, object obj)
        {
            ThrowExceptionUtil.ArgumentNotNull(format, "format");
            ThrowExceptionUtil.ArgumentNotNull(obj, "obj");
            string result = string.Empty;

            List <string> propertyList = new List <string>();
            Match         match        = FormatRegex.Match(format);

            while (match.Success)
            {
                propertyList.Add(match.Groups["name"].Value);
                match = match.NextMatch();
            }

            result = format;

            if (obj is DataRow)
            {
                DataRow rowItem = obj as DataRow;
                foreach (string item in propertyList)
                {
                    if (rowItem.Table.Columns.Contains(item))
                    {
                        result = result.Replace("@" + item, rowItem[item].ToString());
                    }
                }
            }
            else if (obj is BeeDataAdapter)
            {
                BeeDataAdapter dataAdapter = obj as BeeDataAdapter;
                foreach (string item in propertyList)
                {
                    result = result.Replace("@" + item, dataAdapter.Format(item));
                }
            }
            else
            {
                IEntityProxy entityProxy = EntityProxyManager.Instance.GetEntityProxyFromType(obj.GetType());
                foreach (string item in propertyList)
                {
                    object propertyValue = entityProxy.GetPropertyValue(obj, item);
                    result = result.Replace("@" + item, propertyValue == null ? string.Empty : propertyValue.ToString());
                }
            }

            return(result);
        }
예제 #27
0
        private void Init(BeeDataAdapter dataAdapter)
        {
            StringBuilder columnClauseBuilder    = new StringBuilder();
            StringBuilder parameterClauseBuilder = new StringBuilder();
            StringBuilder updateClauseBuilder    = new StringBuilder();

            if (dataAdapter != null && dataAdapter.Count > 0)
            {
                int index = 0;

                foreach (string fieldName in dataAdapter.Keys)
                {
                    index++;

                    string columnName    = owner.DbDriver.FormatField(fieldName);
                    string parameterName = string.Format("{0}{1}", owner.DbDriver.ParameterPrefix, fieldName);
                    columnClauseBuilder.Append(columnName);
                    parameterClauseBuilder.Append(parameterName);
                    updateClauseBuilder.Append(columnName).Append("=").Append(parameterName);
                    columnClauseBuilder.Append(",");
                    parameterClauseBuilder.Append(",");
                    updateClauseBuilder.Append(",");

                    DbParameter parameter = owner.DbDriver.CreateParameter();
                    parameter.ParameterName = fieldName;
                    parameter.Value         = dataAdapter[fieldName];
                    if (parameter.Value is DateTime)
                    {
                        parameter.DbType = System.Data.DbType.DateTime;
                    }
                    else
                    {
                        //  to do nothing
                    }

                    if (parameter != null)
                    {
                        this.dbParameterList.Add(parameter);
                    }
                }
                columnClauseBuilder.Remove(columnClauseBuilder.Length - 1, 1);
                parameterClauseBuilder.Remove(parameterClauseBuilder.Length - 1, 1);
                updateClauseBuilder.Remove(updateClauseBuilder.Length - 1, 1);
            }
            this.parameterClause = parameterClauseBuilder.ToString();
            this.columnClause    = columnClauseBuilder.ToString();
            this.updateClause    = updateClauseBuilder.ToString();
        }
예제 #28
0
        internal static CheckMethodResult GetEntityMethodName(Type type, string methodName, BeeDataAdapter dataAdapter)
        {
            ThrowExceptionUtil.ArgumentNotNull(type, "type");
            ThrowExceptionUtil.ArgumentNotNullOrEmpty(methodName, "methodName");

            if (dataAdapter == null)
            {
                dataAdapter = new BeeDataAdapter();
            }

            CheckMethodResult result = new CheckMethodResult();

            MethodSchema        methodSchema = null;
            List <MethodSchema> list         = null;

            //lock (lockobject)
            {
                // 保证参数长的先被匹配
                // 该方法本身就排过序了
                list = EntityProxyManager.Instance.GetEntityMethods(type);

                foreach (MethodSchema item in list)
                {
                    // Check the name of the method.
                    if (string.Compare(item.Name, methodName, true) == 0)
                    {
                        if (CheckMethod(item, methodName, dataAdapter, out result.DataAdapter))
                        {
                            methodSchema = item;
                            break;
                        }
                    }
                }
            }

            if (methodSchema != null)
            {
                result.MethodName = methodSchema.MemberInfo.ToString();
            }
            else
            {
                CoreException exception = new CoreException("Can not match a method for {0}.{1}\r\n".FormatWith(type.Name, methodName));
                exception.ErrorCode = ErrorCode.MVCNoAction;
                throw exception;
            }
            return(result);
        }
예제 #29
0
        private static BeeDataAdapter GetHeaderItem(PropertySchema propertySchema)
        {
            ModelPropertyAttribute modelPropertyAttribute
                = propertySchema.GetCustomerAttribute <ModelPropertyAttribute>();

            BeeDataAdapter dataAdapter = new BeeDataAdapter();
            string         descriptionInfo;

            if (modelPropertyAttribute != null)
            {
                if (!modelPropertyAttribute.Visible)
                {
                    return(null);
                }
                descriptionInfo = modelPropertyAttribute.Description;
                if (string.IsNullOrEmpty(descriptionInfo))
                {
                    descriptionInfo = propertySchema.Name;
                }

                dataAdapter.Add("description", descriptionInfo);
                dataAdapter.Add("name", propertySchema.Name);

                if (modelPropertyAttribute.ColumnWidth != 0)
                {
                    dataAdapter.Add("width", modelPropertyAttribute.ColumnWidth.ToString());
                }

                if (!string.IsNullOrEmpty(modelPropertyAttribute.Align))
                {
                    dataAdapter.Add("align", modelPropertyAttribute.Align);
                }

                if (modelPropertyAttribute.OrderableFlag)
                {
                    dataAdapter.Add("orderField", propertySchema.Name);
                }
            }
            else
            {
                dataAdapter.Add("description", propertySchema.Name);
                dataAdapter.Add("Name", propertySchema.Name);
            }

            return(dataAdapter);
        }
예제 #30
0
        public virtual PageResult Show(int id)
        {
            BeeDataAdapter dataAdapter = new BeeDataAdapter();

            if (id >= 0)
            {
                using (DbSession dbSession = GetDbSession())
                {
                    T result =
                        dbSession.Query <T>(SqlCriteria.New.Equal(OrmUtil.GetIdentityColumnName <T>(), id)).FirstOrDefault();
                    dataAdapter = BeeDataAdapter.From <T>(result);
                }
            }

            ViewData.Merge(dataAdapter, true);

            return(View("BeeAutoShow"));
        }