コード例 #1
0
        public static string GetSqlWithParameters <T>(System.Data.Entity.Core.Objects.ObjectQuery <T> query)
        {
            System.Text.StringBuilder sb = new StringBuilder();

            string traceString = query.ToTraceString() + Environment.NewLine;

            foreach (var parameter in query.Parameters)
            {
                traceString += parameter.Name + " [" + parameter.ParameterType.FullName + "] = " + parameter.Value + "\n";
            }

            return(traceString);
        }
コード例 #2
0
        public int Update(Expression <Func <TEntity, bool> > where, Expression <Func <TEntity> > updater)
        {
            // where
            var objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)CurrentDbContext).ObjectContext;
            var set           = objectContext.CreateObjectSet <TEntity>();
            var query         = set.Where(where);

            //System.Data.Objects.ObjectQuery<TEntity> objQuery = query as System.Data.Objects.ObjectQuery<TEntity>;
            System.Data.Entity.Core.Objects.ObjectQuery <TEntity> objQuery = query as System.Data.Entity.Core.Objects.ObjectQuery <TEntity>;
            List <object> objParams = new List <object>();
            string        sql       = objQuery.ToTraceString();

            sql = sql.Substring(sql.IndexOf("from", StringComparison.OrdinalIgnoreCase)).Replace("__linq__", "");
            int paramindex = objQuery.Parameters.Count;

            foreach (var para in objQuery.Parameters)
            {
                objParams.Add(para.Value);
            }
            // update set
            var valueObj = updater.Compile().Invoke();
            MemberInitExpression updateMemberExpr = (MemberInitExpression)updater.Body;
            StringBuilder        updateBuilder    = new StringBuilder();
            Type valueType = typeof(TEntity);

            foreach (var bind in updateMemberExpr.Bindings.Cast <MemberAssignment>())
            {
                string name = bind.Member.Name;
                updateBuilder.AppendFormat("{0}=@p{1},", name, paramindex++);
                var value = valueType.GetProperty(name).GetValue(valueObj, null);
                objParams.Add(value);
            }
            if (updateBuilder.Length == 0)
            {
                throw new Exception("Please update at list one property.");
            }
            else
            {
                sql = " update [Extent1] set " + updateBuilder.Remove(updateBuilder.Length - 1, 1).ToString() + " " + sql;
            }
            int index = this.CurrentDbContext.Database.ExecuteSqlCommand(sql, objParams.ToArray());

            _DbContext = new TDbContext();
            return(index);
        }
コード例 #3
0
        public QueryInformation GetQueryInformation<T>(System.Data.Entity.Core.Objects.ObjectQuery<T> query)
        {
            var fromRegex = new Regex(@"FROM \[([^\]]+)\]\.\[([^\]]+)\] AS (\[[^\]]+\])", RegexOptions.IgnoreCase);

            var queryInfo = new QueryInformation();

            var str = query.ToTraceString();
            var match = fromRegex.Match(str);
            queryInfo.Schema = match.Groups[1].Value;
            queryInfo.Table = match.Groups[2].Value;
            queryInfo.Alias = match.Groups[3].Value;

            var i = str.IndexOf("WHERE");
            if (i > 0)
            {
                var whereClause = str.Substring(i);
                queryInfo.WhereSql = whereClause.Replace(queryInfo.Alias + ".", "");
            }
            return queryInfo;
        }
コード例 #4
0
        public QueryInformation GetQueryInformation <T>(System.Data.Entity.Core.Objects.ObjectQuery <T> query)
        {
            var queryInfo = new QueryInformation();

            var str   = query.ToTraceString();
            var match = FromRegex.Match(str);

            queryInfo.Schema = match.Groups[1].Value;
            queryInfo.Table  = match.Groups[2].Value;
            queryInfo.Alias  = match.Groups[3].Value;

            var i = str.IndexOf("WHERE", StringComparison.Ordinal);

            if (i > 0)
            {
                var whereClause = str.Substring(i);
                queryInfo.WhereSql = whereClause.Replace(queryInfo.Alias + ".", "");
            }

            return(queryInfo);
        }
コード例 #5
0
        //public int Delete(System.Linq.Expressions.Expression<Func<TEntity, bool>> Where)
        //{

        //    IList<TEntity> entityList = this._db.Set<TEntity>().Where(Where).ToList();
        //    return this.Delete(entityList);
        //}

        public int Delete(Expression <Func <TEntity, bool> > where)
        {
            var objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)CurrentDbContext).ObjectContext;
            var set           = objectContext.CreateObjectSet <TEntity>();
            var query         = set.Where(where);

            //System.Data.Objects.ObjectQuery<TEntity> objQuery = query as System.Data.Objects.ObjectQuery<TEntity>;
            System.Data.Entity.Core.Objects.ObjectQuery <TEntity> objQuery = query as System.Data.Entity.Core.Objects.ObjectQuery <TEntity>;
            string sql = objQuery.ToTraceString();

            sql = "delete " + sql.Substring(sql.IndexOf("from", StringComparison.OrdinalIgnoreCase));
            sql = sql.Replace("[Extent1].", "").Replace("AS [Extent1]", "").Replace("__linq__", "");
            List <object> objs = new List <object>();

            foreach (var para in objQuery.Parameters)
            {
                objs.Add(para.Value);
            }
            int index = this.CurrentDbContext.Database.ExecuteSqlCommand(sql, objs.ToArray());

            _DbContext = new TDbContext();
            return(index);
        }
コード例 #6
0
 protected void InitializeQuery(System.Data.Entity.Core.Objects.ObjectQuery <TElement> objectQuery)
 {
     this._objectQuery = objectQuery;
 }
コード例 #7
0
 public virtual void ResetQuery()
 {
     this._objectQuery = (System.Data.Entity.Core.Objects.ObjectQuery <TElement>)null;
 }
コード例 #8
0
 public InternalQuery(InternalContext internalContext, System.Data.Entity.Core.Objects.ObjectQuery objectQuery)
 {
     this._internalContext = internalContext;
     this._objectQuery     = (System.Data.Entity.Core.Objects.ObjectQuery <TElement>)objectQuery;
 }